Хорошо, я пытаюсь запросить базу данных sqlite. Я пытался быть хорошим и использовал метод запроса SQLiteDatabase и передавал значения в параметре selectArgs, чтобы убедиться, что все правильно экранировано, но это не сработало. Я никогда не получал никаких строк (без ошибок).
Я начал интересоваться SQL-кодом, который он генерировал, поэтому я немного поэкспериментировал и обнаружил SQLiteQueryBuilder (и, очевидно, переполнение стека плохо обрабатывает ссылки с круглыми скобками, поэтому я не могу ссылка на якорь для метода buildQuery), который, как я предполагаю, использует ту же логику для генерации оператора SQL. Я сделал это:
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(BarcodeDb.Barcodes.TABLE_NAME);
String sql = builder.buildQuery(new String[] { BarcodeDb.Barcodes.ID, BarcodeDb.Barcodes.TIMESTAMP, BarcodeDb.Barcodes.TYPE, BarcodeDb.Barcodes.VALUE },
"? = '?' AND ? = '?'",
new String[] { BarcodeDb.Barcodes.VALUE, barcode.getValue(), BarcodeDb.Barcodes.TYPE, barcode.getType()},
null, null, null, null);
Log.d(tag, "Query is: " + sql);
SQL, который регистрируется в этот момент:
SELECT _id, timestamp, type, value FROM barcodes WHERE (? = '?' AND ? = '?')
Однако вот что сказано в документации по SQLiteQueryBuilder.buildQuery о параметре selectAgs:
Вы можете включить? S в выбор, который
будут заменены значениями из
selectionArgs, для того чтобы они
появляются в выборе.
... но это не работает. Есть идеи?