1

テーブルのデフォルト設定を更新するメソッドを書いています。表は非常に単純です。最初の列には設定のタイプを示すラベルが含まれ、2 番目の列には設定の値が格納されます。

実行のこの時点では、テーブルは空です。初期値を設定しているだけです。したがって、このカーソルは空に戻ると思います。しかし、代わりにエラーが発生します (以下を参照)。私が取り組んでいる設定は「lastPlayer」と呼ばれ、「SETTINGS_TABLE」の「SETTING_COLUMN」に保存されるはずです。コードは次のとおりです。

public static void updateSetting(String setting, String newVal) {
    String table = "SETTINGS_TABLE";
    String[] resultColumn = new String[] {VALUE_COLUMN};
    String where = SETTING_COLUMN + "=" + setting;
    System.err.println(where);

    SQLiteDatabase db = godSimDBOpenHelper.getWritableDatabase(); 
    Cursor cursor = db.query(table, resultColumn, where, null, null, null, null);
    System.err.println("cursor returned"); //I never see this ouput

        \\more
}

sqlite が返されました: エラー コード = 1、メッセージ = そのような列はありません: lastPlayer

lastPlayerにそのようながないと言っているのはなぜですか? 列「SETTING_COLUMN」を見て、その列の値が「lastPlayer」のレコードを返すようにクエリに指示していると思いました。よくわかりません。誰かが私をまっすぐにすることができますか?私はこれを1時間探していましたが、何が間違っているのかわかりません。

ありがとう!

4

1 に答える 1

2

クエリを適切に構築/エスケープしていません。値lastPlayerが引用符で囲まれていないため、ステートメントは 2 つの列が等しいかどうかをチェックしています。これは、エラー メッセージが示していることです。

クエリを適切に作成するには、文字列連結を使用して手動でこれを行わないことをお勧めします。代わりに、SQLiteDatabase.query()selectionArgsのパラメーターはこれを行うためのものです。

クエリのパラメータは、 として定義し?、に基づいて入力する必要がありますselectionArgs。ドキュメントから:

?s を選択に含めることができます。これは、selectionArgs からの値で置き換えられ、選択に表示されます。値は文字列としてバインドされます。

したがって、コードは次のようになります。

String where = SETTING_COLUMN + " = ?";
Cursor cursor = db.query(table, resultColumn, where, new String[] { setting }, null, null, null);
于 2012-12-06T19:04:48.460 に答える