Стройте строку запроса поэтапно, а не все сразу. Если вы всегда будете выбирать против статуса, поместите это в основное предложение 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 *?»
Примечания вы можете форматировать строки как код углубленных их четыре пробела. Кнопка «101 \ n010» на панели инструментов редактора делает это за вас. Нажмите оранжевую метку вопроса на панели инструментов редактора, чтобы получить дополнительную информацию и советы по форматированию. – outis