0

何が間違っているのかわかりませんが、テーブルの列の単一の整数値を 0 から 1 に更新しようとしています。データベースを作成するときに、次を使用して列のすべての値をゼロに設定します。

for (int i = 0; i < setups.length; i++) {
        ContentValues values = new ContentValues();
        values.put(JokeDbContract.TblJoke.COLUMN_NAME_SETUP, setups[i]);
        values.put(JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE, punchlines[i]);
        values.put(JokeDbContract.TblJoke.COLUMN_NAME_USED, 0);

        db.insert(JokeDbContract.TblJoke.TABLE_NAME, null, values);
    }

次に、実際のアクティビティでは、次のことを行っています。

private void findNewJoke() {
    JokeDb jokeDb = JokeDb.getInstance(this);
    SQLiteDatabase theDb = jokeDb.getDB();
    String selection = JokeDbContract.TblJoke.COLUMN_NAME_USED + "=" + 0;

    // Query database for a joke that has not been used, update the fields
    // theJoke and thePunchline appropriately
    String[] columns = {JokeDbContract.TblJoke._ID,
                        JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE,
                        JokeDbContract.TblJoke.COLUMN_NAME_SETUP,
                        JokeDbContract.TblJoke.COLUMN_NAME_USED};

    Cursor c = theDb.query(JokeDbContract.TblJoke.TABLE_NAME, columns, selection,
                        null, null, null, null);

    if (c.moveToFirst() == false) {
        Toast.makeText(this, R.string.error_retrieving_joke, Toast.LENGTH_LONG).show();
        Log.e(getString(R.string.app_name),"No jokes retreived from DB in JokeActivity.findNewJoke()!");
    }
    else {
        ContentValues values = new ContentValues();
        theSetup = c.getString(c.getColumnIndexOrThrow(JokeDbContract.TblJoke.COLUMN_NAME_SETUP));
        thePunchline = c.getString(c.getColumnIndexOrThrow(JokeDbContract.TblJoke.COLUMN_NAME_PUNCHLINE));

        String updateSelection = JokeDbContract.TblJoke.COLUMN_NAME_SETUP + "=" + theSetup;

        values.put(JokeDbContract.TblJoke.COLUMN_NAME_USED, 1);

        theDb.update(JokeDbContract.TblJoke.TABLE_NAME, values, updateSelection, null);
    }
}

更新時にエラーが発生します:

java.lang.RuntimeException: .... while compiling: UPDATE jokes SET used=? 
WHERE setup=Why do programmers always mix up Halloween and Christmas?

使用された列の実際の値セットを取得していないようです。プログラムが最終的に行うことは、使用済み = 0 のジョークを循環し、表示されたときに使用済みを 1 に設定します。したがって、クエリはまだ使用されていないジョークのみを取得します。シンプルなものが欠けているような気がします。

4

1 に答える 1