SQLite Java Android没有这样的表,程序崩溃
我正试图为我的程序建立数据库,我有很多愚蠢的问题。。。 这是主要活动的一部分:SQLite Java Android没有这样的表,程序崩溃,java,android,sqlite,Java,Android,Sqlite,我正试图为我的程序建立数据库,我有很多愚蠢的问题。。。 这是主要活动的一部分: Database db = new Database(this,editText.getText().toString()); String text = db.printRow(); textView.setText(text); db.execSQL("create table player(id integer primary key autoincrement,nick text);"); 现在数据库类:
Database db = new Database(this,editText.getText().toString());
String text = db.printRow();
textView.setText(text);
db.execSQL("create table player(id integer primary key autoincrement,nick text);");
现在数据库类:
String nickname="EmptyNick";
public Database(Context context, String name) {
super(context, "database.db", null, 1);
nickname = name;
}
public void onCreate(SQLiteDatabase db) {
if(!nickname.equals("EmptyNick")) {
db.execSQL("create table player(id integer primary key autoincrement,nick text);");
Users user = new Users();
user.setNick("Mariusz");
addPlayer(user);
}
else {
//not important
}
}
private void addPlayer(Users user) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("nick",user.getNick());
db.insertOrThrow("player",null,values);
}
public String printRow() {
String string=null;
if(!nickname.equals("EmptyNick")) {
String[] collumns = {"id","nick"};
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query("player",collumns,null,null,null,null,null);
cursor.moveToFirst();
while (cursor.moveToNext()) {
string += cursor.getString(1);
}
}
else {
//not important
}
return string;
}
db.execSQL("create table player(id integer primary key autoincrement,nick text);");
错误:
没有这样的桌子:玩家
原因:java.lang.reflect.InvocationTargetException
原因:android.database.sqlite.SQLiteException:没有这样的表:player(代码1):,编译时:SELECT id,nick FROM player
db.execSQL("create table player(id integer primary key autoincrement,nick text);");
我真的看不出有什么不对。错误显示没有表“player”,但它是。关于onCreate methon的要求,请参见:
db.execSQL("create table player(id integer primary key autoincrement,nick text);");
有人能帮我吗?如果我制作Toast而不是text.setText(…),它将显示空字段,因此是的,它无法创建特定行。我理解错误,但不知道错误来自何处以及原因。您尝试使用的表不存在。在这种情况下,通常最好检查正在使用的数据库并检查表是否存在。在这种特殊情况下,如果满足某个条件,则似乎要创建表。条件是您的
昵称
的值与默认值不同。然而,这并没有什么不同。确保您使用的表存在并且只有在该表存在并且您具有创建该表的正确条件时才使用。我真的不理解您的问题。如果出现错误,它将抛出一条ANR消息,您如何打印toast并显示空的?Toast显示为空,因为您只向表中添加了一条数据记录,然后在printRow()中调用cursor.moveToFirst,然后调用while(cursor.moveToNext()),这将把光标移动到第二行,它将返回false,因为您只有一条记录。onCreate
由超级构造函数调用name
此时未更新,因此出于某种原因,您不会调用create查询。Der Golem昵称不是“EmptyNick”,因为:Database db=new Database(this,editText.getText().toString());我还将editText中的字符串放入构造函数。但是如果这是真的,onCreate由super()调用(正如njzk2所说),这可能就是答案。我会在一分钟内检查。好吧,即使我删除了所有关于条件的行,同样的错误仍然存在。。。我真的搞不懂。理论上一切正常,但实际上没有这样的表格。再见:/你读了吗?好的,谢谢你的建议。即使条件满足,问题仍然存在。代码中有一些我看不到的错误。您是否查看了实际的数据库并检查了表是否存在?
db.execSQL("create table player(id integer primary key autoincrement,nick text);");