2010-12-11 2 views
0

В моем модуле поиска я использую базу данных SQLite. Иногда я ищу более двух значений. Поэтому я использую условие AND и иногда ищут только одно значение. Эти два случая, которые мне нужно реализовать в одном запросе. Пожалуйста, помогите мне.Как решить все в одном запросе?

Это запрос:

Cursor dbcur = myDB.rawQuery("select * from "+dbtable+" where Status='"+item+"'AND ball_court='"+ball+"'AND Tovendor='"+vendor+"'", null); 

Иногда я ищу status и ball_court, tovendor и иногда я ищу только status. Как решить эту проблему?

+0

Примечания вы можете форматировать строки как код углубленных их четыре пробела. Кнопка «101 \ n010» на панели инструментов редактора делает это за вас. Нажмите оранжевую метку вопроса на панели инструментов редактора, чтобы получить дополнительную информацию и советы по форматированию. – outis

ответ

0

Стройте строку запроса поэтапно, а не все сразу. Если вы всегда будете выбирать против статуса, поместите это в основное предложение WHERE, затем добавьте дополнительные выражения. Используйте параметры (которые вы можете сделать с SQLiteDatabase.query), а не объединяйте значения в сам запрос, чтобы предотвратить внедрение SQL. dbtable лучше не поступать из ненадежных источников (например, пользователей, самой базы данных). Мой Java немного ржавый, но попробовать что-то вроде следующего, чтобы начать:

List<String> argList = new LinkedList<String>(); 

String selection = "Status=?"; 
argList.add(item); 
if (ball != null && ball.length()) { 
    selection += " AND ball_court=?"; 
    argList.add(ball); 
} 
if (vendor != null && vendor.length()) { 
    selection += " AND Tovendor=?"; 
    argList.add(vendor); 
} 

String[] argArray = new String[argList.length()]; 
argList.toArray(argArray); 
// columns is a String[] of column names 
Cursor dbcur = myDB.query(false, dbtable, columns, selection, argArray, null, null, null); 

Вместо добавления строк, вы можете захотеть использовать StringBuilder.

Что касается SELECT *, читать «What is the reason not to use SELECT *?»

-1

Возможно, вам удастся получить ответы, если вы разместите образец запроса, а также то, что вы можете искать! Я не совсем понял ваш вопрос, так как я/должен был бы помочь.

+0

Cursor dbcur = myDB.rawQuery ("select * from" + dbtable + "где Status = '" + item + "' AND ball_court = '" + ball + "' AND Tovendor = '" + vendor + "'", null); .. ............ Это мой запрос. Некоторое время я ищу статус и ball_court, tovendor и некоторые из них я ищу статус только. Как решить эту проблему ....... Помогите мне. ........ – user533787

+0

@ user538689: Вы были, вероятно, занижены, так как ваш ответ на самом деле не отвечает на вопрос. Как правило, ваш комментарий должен был быть комментарием, но вам нужно как минимум 50 представителей публиковать комментарии по другим вопросам. Для downvoter: «answer» user538689 должен был быть комментарием, но user538689 не может отправлять комментарии. – outis

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