我正在尝试为我的程序创建数据库,而且我遇到了很多愚蠢的问题...... 它是主要活动的片段:
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(...)它会显示空字段,所以是的,它无法创建特定的行。我理解错误,但不要从哪里来,为什么会这样。
答案 0 :(得分:0)
您尝试使用的表不存在。在这种情况下,通常最好检查您正在使用的数据库并检查表是否存在。在这种特殊情况下,如果满足条件,您似乎可以创建表。条件是您的nickname
值与默认值不同。但是,它没有区别。当且仅当表存在并且您具有创建表的正确条件时,请确保使用表。
答案 1 :(得分:0)
我真的不明白你的问题。如果有错误,它会抛出一条ANR消息,你怎么打印吐司并显示空?并且Toast显示为空,因为您只向表中添加了一个数据记录,然后在printRow()中调用了cursor.moveToFirst,然后调用while(cursor.moveToNext()),这会将光标移动到第二行并且它会返回false,因为你只有1条记录。