我目前正在使用eclipse开发一个Android应用程序。我在更新数据库时遇到了问题。问题是在调用updateFlag方法时应用程序崩溃。 updateFlag方法仅基于rowId更新一个特定列。
这是我在SQLiteAdapter类中的数据库结构:
public long insert(String answer, String question, String hint, String flag, String level){
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_ANSWER, answer);
contentValues.put(KEY_QUESTION, question);
contentValues.put(KEY_HINT, hint);
contentValues.put(KEY_FLAG, flag);
contentValues.put(KEY_LEVEL, level);
return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
}
这是SQLiteAdapter类中的更新方法:
public void updateFlag(long rowId)
{
ContentValues args = new ContentValues();
args.put(KEY_FLAG, "1");
sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null);
}
这就是我在另一个类中调用updateFlag方法的方法:
mySQLiteAdapterListener2 = new SQLiteAdapter(this);
mySQLiteAdapterListener2.openToWrite();
long idListener = Long.parseLong(getId);
mySQLiteAdapterListener2.updateFlag(idListener);
mySQLiteAdapterListener2.close();
我的代码出了什么问题?任何人都知道如何以正确的方式更新基于rowId的特定列?
答案 0 :(得分:2)
SQLiteDatabase update方法有四个参数:
database.update(String table_name, ContentValues values, String selection, String[] selectionArgs);
因此,您的查询应该与您的updateFlag方法类似。将updateFlag方法替换为此方法并尝试此操作。
public void updateFlag(long rowId)
{
ContentValues args = new ContentValues();
args.put(KEY_FLAG, "1");
sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[]{rowId+""});
}
答案 1 :(得分:1)
试试这个:
sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[] {rowId});
传递将替换'?'的值的最后一个参数。
这假设您的更新有问题。您需要发布堆栈跟踪,以便我们可以看到应用程序崩溃的位置。