SQLite Java Android没有这样的表,程序崩溃了

时间:2014-12-11 15:44:29

标签: java android sqlite

我正在尝试为我的程序创建数据库,而且我遇到了很多愚蠢的问题...... 它是主要活动的片段:

Database db = new Database(this,editText.getText().toString());
String text = db.printRow();
textView.setText(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;
}

错误: 没有这样的表:玩家 引起:java.lang.reflect.InvocationTargetException 引起:android.database.sqlite.SQLiteException:没有这样的表:player(代码1):,同时编译:SELECT id,nick FROM player

我真的看不出有什么问题。错误说没有表'播放器',但确实如此。关于onCreate methon的开始:

db.execSQL("create table player(id integer primary key autoincrement,nick text);");

有人能帮助我吗?如果我使用Toast而不是text.setText(...)它会显示空字段,所以是的,它无法创建特定的行。我理解错误,但不要从哪里来,为什么会这样。

2 个答案:

答案 0 :(得分:0)

您尝试使用的表不存在。在这种情况下,通常最好检查您正在使用的数据库并检查表是否存在。在这种特殊情况下,如果满足条件,您似乎可以创建表。条件是您的nickname值与默认值不同。但是,它没有区别。当且仅当表存在并且您具有创建表的正确条件时,请确保使用表。

答案 1 :(得分:0)

我真的不明白你的问题。如果有错误,它会抛出一条ANR消息,你怎么打印吐司并显示空?并且Toast显示为空,因为您只向表中添加了一个数据记录,然后在printRow()中调用了cursor.moveToFirst,然后调用while(cursor.moveToNext()),这会将光标移动到第二行并且它会返回false,因为你只有1条记录。