0

私は現在、EclipseでAndroidアプリを開発しています。データベースの更新中に問題が発生しました。問題は、updateFlag メソッドの呼び出し中にアプリがクラッシュすることです。updateFlag メソッドは、rowId のみに基づいて 1 つの特定の列のみを更新します。

これは、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 クラスの update メソッドです。

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 update メソッドは 4 つの引数を取ります。

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

「?」を置き換える値を渡す場合の最後のパラメータ。

これは、更新に問題があることを前提としています。アプリがクラッシュしている場所を確認できるように、スタックトレースを投稿する必要があります。

于 2013-05-15T16:08:46.560 に答える