2

私のデータベースにはテーブル名 Answers があり、_id、b1、b2、b3、b4 の 5 つの列があります。私がやろうとしているのは、列 b1、b2、b3、b4 をカーソル内でランダムに取得することだけです。次のコードを使用して、カーソルで順番に取得するには:

public Cursor getAllAnswers(int n)     
{
     String myPath = DB_PATH + DB_NAME;
     myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

    Cursor curs;
    curs=myData.rawQuery("SELECT b1, b2, b3, b4 FROM Answers WHERE _id='"+n+"';", null);
    curs.moveToFirst();
    myData.close();
    return curs;
};

を使用してランダムに取得しようとしました

curs=myData.rawQuery("SELECT b1, b2, b3, b4 FROM Answers WHERE _id='"+n+"' ORDER BY RANDOM() LIMIT 1;", null);

しかし、機能していません。事前に助けてくれてありがとう

Geobitsによって示されるランダムな列を達成する正しい方法を示すために編集されました(必要な場合):

 public Cursor getAllAnswers(int n)     
{
     String myPath = DB_PATH + DB_NAME;
     myData = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
  String query = "SELECT ";
boolean[] chosen = new boolean[]{false, false, false, false};
Random rand = new Random();
for(int i=0;i<4;i++)
{
    if(i > 0)
        query += ", ";
    int c = rand.nextInt(4); 
    while(chosen[c])
        c = rand.nextInt(4);
    chosen[c] = true;
    query += "b" + Integer.toString(c+1);
}
query += " FROM Answers WHERE _id='"+n+"';";
    Cursor curs;
    curs=myData.rawQuery(query, null);
    curs.moveToFirst();
    myData.close();
    return curs;
};
4

2 に答える 2

1

私が理解していることを確認するために、1 つの行に 4 つの列すべてを取得する必要がありますが、カーソル内の列をランダム化して、カーソルが になる可能性があります{b2, b4, b3, b1}よね? 私が推測する複数の選択肢の答えを混同する何か?ORDER BY列ではなく行を注文するため、そこでは役に立ちません。

SQLite は、現在のクエリの順序でそれらを表示しますb1, b2, b3, b4。それらを混同するには、クエリ文字列自体をランダム化する必要があります。

String query = "SELECT ";
boolean[] chosen = new boolean{false, false, false, false};
Random rand = new Random();
for(int i=0;i<4;i++)
{
    if(i > 0)
        query += ", ";
    int c = rand.nextInt(4); 
    while(chosen[c])
        c = rand.nextInt(4);
    chosen[c] = true;
    query += "b" + Integer.toString(c+1);
}
query += " FROM Answers WHERE _id='"+n+"';"

または、それらを順番に取得し、同様のものを使用して各列をランダムに取得することもできます。

于 2012-10-14T01:12:30.137 に答える
1

そのはず

ORDER BY RANDOM() LIMIT 1
于 2012-10-13T23:46:44.927 に答える