стілКолонки
null для всіх стовпців як у SELECT * FROM ...
new String[] { "column1", "column2", ... }для конкретних стовпців як у SELECT column1, column2 FROM ...- ви також можете вводити сюди складні вирази:
new String[] { "(SELECT max(column1) FROM table1) AS max" }дав би вам стовпець з назвою, що maxмістить максимальне значенняcolumn1
деЗастереження
- частина, яку ви додаєте
WHEREбез цього ключового слова, наприклад"column1 > 5"
- повинні включати
?динамічні речі, наприклад "column1=?"-> дивwhereArgs
деArgs
- вкажіть вміст, який заповнює кожен,
?у whereClauseпорядку їх появи
інші
- так само, як
whereClauseвислів після ключового слова або nullякщо ви не використовуєте його.
Приклад
String[] tableColumns = new String[] {
"column1",
"(SELECT max(column1) FROM table2) AS max"
};
String whereClause = "column1 = ? OR column1 = ?";
String[] whereArgs = new String[] {
"value1",
"value2"
};
String orderBy = "column1";
Cursor c = sqLiteDatabase.query("table1", tableColumns, whereClause, whereArgs,
null, null, orderBy);
// since we have a named column we can do
int idx = c.getColumnIndex("max");
еквівалентний наступному сировинному запиту
String queryString =
"SELECT column1, (SELECT max(column1) FROM table1) AS max FROM table1 " +
"WHERE column1 = ? OR column1 = ? ORDER BY column1";
sqLiteDatabase.rawQuery(queryString, whereArgs);
Використовуючи версію Where / Bind -Args, ви отримуєте автоматично виведені значення, і вам не доведеться турбуватися, якщо вхідні дані містять '.
Небезпечно: String whereClause = "column1='" + value + "'";
Безпечно:String whereClause = "column1=?";
тому що якщо значення містить 'ваше твердження, або воно порушується, і ви отримуєте винятки або непередбачувані речі, наприклад, value = "XYZ'; DROP TABLE table1;--"ви навіть можете опустити вашу таблицю, оскільки вислів стане двома заявами та коментарем:
SELECT * FROM table1 where column1='XYZ'; DROP TABLE table1;--'
з використанням версії args XYZ'; DROP TABLE table1;--буде вибрано 'XYZ''; DROP TABLE table1;--'і вважатиметься лише значенням. Навіть якщо 'не призначено робити погані речі, все-таки досить часто люди мають його у своїх іменах або використовують у текстах, файлах, паролях тощо. Тому завжди використовуйте версію аргументів. (Добре будувати intта інші примітиви безпосередньо, whereClauseхоча)