从db中选择不同的随机行

时间:2015-06-06 19:50:03

标签: arrays sqlite select random distinct

我试图从问题表中获取5个随机行并放入数组中,但我希望它们是不同的行。这是我当前的代码,它可以获得5个随机行:

public List<List<String>> getAllAnswersByQuestion2() {
    List<String> array1 = new ArrayList<String>();    
    List<String> array2 = new ArrayList<String>();  

    array1.clear();
    array2.clear();

    SQLiteDatabase db = this.getReadableDatabase();

   Cursor c = db.query("questiondb",null,null,null,null,null,"RANDOM() limit 5");

   try {

    if (c!= null && c.moveToFirst())

   {
       do {

     String questdescr = c.getString(c.getColumnIndex(QDESCR));
     String answerSetIds = c.getString(c.getColumnIndex(ASID)); 

     array1.add(questdescr);
     array2.add(answerSetIds);

    } while (c.moveToNext());

 }

   List< List<String> > listArray = new ArrayList< List<String> >();

   listArray.clear();

   listArray.add(array1);
   listArray.add(array2);

   return listArray;

} finally {

        c.close();            
        db.close();
        }
}

我尝试使用以下代码代替光标:

    String selectQuery = "SELECT DISTINCT QDESCR, ASID FROM" +TABLE_QUESTION+ "ORDER BY RAND() LIMIT 5";

   Cursor c = db.rawQuery(selectQuery, null);

但是这一直给我一个通用的语法错误:

06-06 21:30:01.828: E/SQLiteLog(9540): (1) near "BY": syntax error
06-06 21:30:01.828: D/HardwareRenderer(9540): Profiling hardware renderer
06-06 21:30:01.838: W/dalvikvm(9540): threadid=11: thread exiting with uncaught exception (group=0x4163dd88)
06-06 21:30:01.858: E/AndroidRuntime(9540): FATAL EXCEPTION: AsyncTask #1
06-06 21:30:01.858: E/AndroidRuntime(9540): Process: com.example.quizapp, PID: 9540
06-06 21:30:01.858: E/AndroidRuntime(9540): java.lang.RuntimeException: An error occured while executing doInBackground()
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.lang.Thread.run(Thread.java:841)
06-06 21:30:01.858: E/AndroidRuntime(9540): Caused by: android.database.sqlite.SQLiteException: near "BY": syntax error (code 1): , while compiling: SELECT DISTINCT QDESCR, ASID FROMquestiondbORDER BY RAND() LIMIT 5
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at com.example.quizapp.SQLDatabaseHelper.getAllAnswersByQuestion2(SQLDatabaseHelper.java:450)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at com.example.quizapp.MainActivity$showNextRandomQuestion.doInBackground(MainActivity.java:343)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at com.example.quizapp.MainActivity$showNextRandomQuestion.doInBackground(MainActivity.java:1)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-06 21:30:01.858: E/AndroidRuntime(9540):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-06 21:30:01.858: E/AndroidRuntime(9540):     ... 4 more
06-06 21:30:01.888: W/dalvikvm(9540): threadid=12: thread exiting with uncaught exception (group=0x4163dd88)
06-06 21:30:01.888: I/Process(9540): Sending signal. PID: 9540 SIG: 9

有人可以建议我如何修改现有代码以使其发挥作用。

0 个答案:

没有答案