0

Android アプリに SQLite データベースがあります。データベースの YEAR 列に基づいてランダムな行を選択できるようにしたいと考えています。次のように、テーブル全体からランダムな行を選択できます。

    public String[] getTEST3RandChVerScrip() {
    Cursor cursor = this.db.query("provtable Order BY RANDOM() LIMIT 1",
            new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, null,
            null, null, null, null);
    if (cursor != null) {
        for (cursor.moveToFirst(); !cursor.isAfterLast();) {
            String colStrings[] = new String[3];
            colStrings[0] = cursor.getString(0);
            colStrings[1] = cursor.getString(1);
            colStrings[2] = cursor.getString(2);
            return colStrings;
        }

    }
    return null;

}

しかし、選択引数を追加しようとすると、アプリでエラーが発生します。選択引数を追加した場所は次のとおりです。

    public String[] getTEST3RandChVerScrip() {
    Cursor cursor = this.db.query("provtable Order BY RANDOM() LIMIT 1",
            new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, KEY_YEAR =  "1964",
            null, null, null, null);
    if (cursor != null) {
        for (cursor.moveToFirst(); !cursor.isAfterLast();) {
            String colStrings[] = new String[3];
            colStrings[0] = cursor.getString(0);
            colStrings[1] = cursor.getString(1);
            colStrings[2] = cursor.getString(2);
            return colStrings;
        }

    }
    return null;

}

の構文は間違っていKEY_YEAR = "1964"ますか? もしそうなら、それがどうあるべきか考えていますか?

tyczj の回答に従って、クエリを次のように変更しました。

        Cursor cursor = this.db.query("provtable Order BY RANDOM() LIMIT 1",
            new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, KEY_YEAR +              "=?",
            new String[] {"1964"}, null, null, null);

...そして、まだ次のようなエラーが表示されます:06-20 15:18:33.644: E/AndroidRuntime(4758): android.database.sqlite.SQLiteException: near "WHERE": syntax error: , while compiling: SELECT make, model, note FROM provtable Order BY RANDOM() LIMIT 1 WHERE year=?

4

2 に答える 2

2

テーブル名エリアに order by を入れるべきではありません

this.db.query("provtable",
            new String[] { KEY_MAKE, KEY_MODEL, KEY_NOTE }, KEY_YEAR +              "=?",
            new String[] {"1964"}, null, null, "RANDOM() LIMIT 1");
于 2013-06-21T01:48:57.997 に答える
1

そのはず

KEY_YEAR+"=1964"

ただし、selectionArgsを次のように配置する方が良い構文の傷KEY_YEAR+"=?"です。new String[] {"1964"}

エラーも投稿する

于 2013-06-20T20:03:43.490 に答える