我有一个这样结构化的数据库
uid | username | password | email | cur_level
1 default abc123 me@email.com 0
在我的游戏中,当你完成主要活动的一个关卡后,我会运行一个名为increase_current_level()
value++ 的方法;test_db.open(); test_db.updateLevel(value); cur_level = 值;test_db.close();
所以这似乎没有问题,但是当test_db.updateLevel(value)
运行时,当程序崩溃时。
在我的 DBHelper 中,更新级别的代码如下。
public boolean updateLevel(String level) {
ContentValues args = new ContentValues();
args.put(KEY_CUR_LEVEL, level);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "="
+ "WHERE id=(SELECT max(id) FROM DATABASE_TABLE)", null) > 0;
}
我的日志猫错误似乎是:
10-17 17:36:10.833: E/AndroidRuntime(1815): Caused by: android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: UPDATE test SET cur_level=? WHERE _id=WHERE id=(SELECT max(id) FROM DATABASE_TABLE)
我对 SQLite 很陌生,所以这有点吓人,但我希望有人能看到一个非常明显的缺陷。谢谢
更新1:
我更新的代码:
public boolean updateLevel(String level) {
ContentValues args = new ContentValues();
args.put(KEY_CUR_LEVEL, level);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + " = (SELECT max(id) FROM DATABASE_TABLE",
null) > 0;
}
更新了错误信息:
10-17 18:26:50.804: E/AndroidRuntime(3684): Caused by: android.database.sqlite.SQLiteException: near "DATABASE_TABLE": syntax error (code 1): , while compiling: UPDATE test SET cur_level=? WHERE _id = (SELECT max(id) FROM DATABASE_TABLE