更新数据库时应用崩溃

时间:2013-05-15 16:01:28

标签: java android database sqlite updating

我目前正在使用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的特定列?

2 个答案:

答案 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});

传递将替换'?'的值的最后一个参数。

这假设您的更新有问题。您需要发布堆栈跟踪,以便我们可以看到应用程序崩溃的位置。

相关问题