2015-05-14 3 views
0

Я создал две строковые переменные: «questionString» и «answerSetId» - первый из которых я присвоил текстовому представлению - второй из которых я хотел бы передать в мой дб вспомогательный класс:Передать переменную string в db helper и использовать в запросе

public void showNextRandomQuestion3() { 

     SQLDatabaseHelper db = new SQLDatabaseHelper(this); 

     //get the data from the database 
     List<List<String>> listList = db.getAllAnswersByQuestion1(); 

     //Get the question/text/answer Strings 
     List<String> questionStrings = listList.get(0); //question Strings 
     List<String> answerSetIds = listList.get(4); 

     //Generate random index 
     Random r = new Random(); 
     int rand = Math.abs((r.nextInt() % questionStrings.size())); 

     //get answer description for randomly selected question 
     String questionString = questionStrings.get(rand); 
     String answerSetId = answerSetIds.get(rand); 

     questionView.setText(questionString); 

     } 

в моем дб вспомогательного класса, я хочу, чтобы использовать эту переменную строку в качестве погладить мой запрос:

public List<List<String>> getAnswers() { 

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

    SQLiteDatabase db = this.getReadableDatabase(); 

    String selectQuery = "SELECT * FROM " + TABLE_ANSWERS + "WHERE " + ASID 
      + " = " + ??answerSetId??; 

    Cursor c = db.rawQuery(selectQuery, null); 
    if (c.moveToFirst()) { 
    do { 

    String textdescr = c.getString(c.getColumnIndex(TDESCR)); 
    String answersdescr = c.getString(c.getColumnIndex(ADESCR)); 
    array1.add(textdescr); 
    array2.add(answersdescr);; 

    } while (c.moveToNext()); 

} 
    List< List<String> > listArray2 = new ArrayList< List<String> >(); 
    listArray2.add(array1); 
    listArray2.add(array2); 

    return listArray2; 
} 

что бы быть лучшим способом для достижения этой цели?

ответ

0

Для того, чтобы выполнить SELECT, вы можете использовать this method

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) 

вместо сырья запроса. В вашем случае:

String selection = ASID+"=?"; 
String selectionArgs[] = new String[]{String.valueOf(answerSetId)}; 
Cursor c = db.query(TABLE_ANSWERS, null, selection, selectionArgs, null, null, null); 

Вы также можете выбрать некоторые конкретные столбцы, передавая список названия столбцов в качестве второго параметра (InstEd нуля). Кроме того, вы можете заменить последнее трехзначное значение в примере для добавления статей GROUP BY, HAVING и ORDER BY.

Например, в вашем запросе вас интересуют только два столбца TDESCR и ADESCR. Таким образом, вы можете использовать этот запрос:

String[] columns = new String[]{TDESCR, ADESCR}; 
String selection = ASID+"=?"; 
String[] selectionArgs = new String[]{String.valueOf(answerSetId)}; 
Cursor c = db.query(TABLE_ANSWERS, columns, selection, selectionArgs, null, null, null); 

Существует много других методов переопределения методов. Посмотрите на документацию here

Однако, если вы предпочитаете вы можете выполнить необработанный запрос таким образом:

String queryString = "SELECT * FROM " + TABLE_ANSWERS + 
    " WHERE "+ASID+"=?"; 
String[] selectionArgs = new String[]{String.valueOf(answerSetId)}; 
sqLiteDatabase.rawQuery(queryString, selectionArgs); 
+0

Отлично - спасибо. В первой части моего вопроса: «Как передать« answerSetId »из основной активности в db-помощник? – jrgart

+0

просто модифицирует ваш метод 'getAnswers (String answerSetId)' – GVillani82

+0

Еще раз спасибо - возможно, просил абсолютное очевидное, но что мне нужно добавить к моему основному методу активности showNextRandomQuestion3() ', чтобы передать «answerSetId». – jrgart

Смежные вопросы