0

私のアプリは、データベースから質問を受け取る雑学クイズアプリです。このアプリにはトピックもあり、データベースに、質問のカテゴリに対応する値を保持するための列を作成することで、これを実装することを考えました。ブール値のarraylistの静的arraylistをインポートしようとしました。次に、それらを繰り返し処理して、値がtrueであるかどうかに基づいて配列を作成します(私のアプリでは、複数のカテゴリを選択できます)。問題は、それ(トピックを保持する作成された配列リスト)をクエリステートメントに組み込むことです。目標は次のようなものだと思います-列2にこれらの値が含まれている場合は、それらをクエリに追加します-これは直接SQLの生のクエリステートメントを使った子供の遊びかもしれないと思いますが、それは気が遠くなるように見えたので、私は

    public Cursor getQuestions() {

    List<String> topicsList = new ArrayList<String>(39);
    for(int i = 0; i < child_check_states.size(); i++) {
        for(int j = 0; j < child_check_states.get(i).size(); j++) {
            if (child_check_states.get(i).get(j) == true) {
                topicsList.add(i+""+j+"");
            }
        }
    }
    Log.d("test", topicsList.toString());

    SQLiteDatabase db = getReadableDatabase();
    Cursor cursor = db.query(DB_NAME, null, null, null, null, null, "random()");
    return cursor;
}

これはトピックから外れており、回答する必要はありませんが、このような行をランダム化するためのパフォーマンスの問題があるのでしょうか。これを実現するために2つのカーソルを使用するメソッドを実装する方が良いと私は一度読んだと思います。私のアプリにはテスト用の行が4つしかないので、何も気づいていませんが、最終的には数千行にしたいと思います。多分数万。

4

1 に答える 1

0

「IN」キーワードを使用するだけです。

SELECT * from my_table where category IN (category_1, category_3, category_4)

または、あなたの例では

public Cursor getQuestions() {

List<String> topicsList = new ArrayList<String>(39);
for(int i = 0; i < child_check_states.size(); i++) {
    for(int j = 0; j < child_check_states.get(i).size(); j++) {
        if (child_check_states.get(i).get(j) == true) {
            topicsList.add(i+""+j+"");
        }
    }
}
Log.d("test", topicsList.toString());

String replacementString = "(?";
for(int i = 1 ; i < topicsList.size(); i++){
    replacementString += ", ?";
}

replacementString += ")";

SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(DB_NAME, <your_columns>, <category_column> IN + replacementString, topicsList.toArray(new String[topicsList.size()]), null, null, "random()");
return cursor;
于 2012-10-21T15:41:58.713 に答える