0

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

4

2 回答 2

2

SQLiteDatabase 更新方法有四个参数:

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+""});
    }
于 2013-05-15T16:19:38.213 回答
1

尝试这个:

sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[] {rowId});

最后一个参数 if 用于传递将替换“?”的值。

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

于 2013-05-15T16:08:46.560 回答