4

DBHelper の getEvents メソッドにこのコード行を含めます。

    int year, month, day;
    String[] columns = new String[] { KEY_EVENTNAME, KEY_DESCRIPTION,
            KEY_HOUR, KEY_MINUTE, KEY_DAY, KEY_MONTH, KEY_YEAR,
            KEY_REMINDER };
    Cursor c = database.query(DATABASE_TABLE, columns, 
            KEY_YEAR + "=?"+ " AND " + KEY_MONTH + "=?" + " AND "+ KEY_DAY + "=?",
            new String[] {String.valueOf(year), String.valueOf(month), String.valueOf(day)}, 
            null, null, KEY_MONTH + " AND "
            + KEY_DAY);

常に何も返しません。以下を外すと

    int year, month, day;
    String[] columns = new String[] { KEY_EVENTNAME, KEY_DESCRIPTION,
            KEY_HOUR, KEY_MINUTE, KEY_DAY, KEY_MONTH, KEY_YEAR,
            KEY_REMINDER };
    Cursor c = database.query(DATABASE_TABLE, columns, 
            KEY_YEAR + "=?",
            new String[] {String.valueOf(year)}, 
            null, null, KEY_MONTH + " AND "
            + KEY_DAY);

それは正しく実行されます。私のコードの問題は何ですか?where句として複数の値を受け入れないようです。誰でもこれで私を助けることができますか? ありがとう。

4

3 に答える 3

15

答えはタイトルにあります。クエリに整数値を渡そうとしていますが、実際には文字列値になります。

これは、Android データベース API の恐ろしい設計上のバグです。パラメータは文字列に対してのみ使用できます。

整数には、文字列値にありがちな書式設定や SQL インジェクションの問題がないため、数値を SQL 式に直接挿入することができます。

Cursor c = database.query(
    DATABASE_TABLE, columns, 
    KEY_YEAR  + "=" + year  + " AND " +
    KEY_MONTH + "=" + month + " AND " +
    KEY_DAY   + "=" + day,
    null, null, null,
    KEY_MONTH + "," + KEY_DAY);

(そして、orderBy構文が間違っていました。)

于 2013-09-11T19:18:19.693 に答える
1

構文やロジックに問題はありません。年、月、日の値が正しいかどうかを確認してください。

于 2013-09-11T16:20:49.953 に答える