Я хочу, например, получить несколько столбцов из базы данных SQLite У меня есть данные с идентификаторами 1, 2, 3, 4, 5. Теперь в базе данных SQLite я хочу получить 2, 5 значения id в Android:
String selectQuery = "SELECT * FROM " + Table_STOCK + "
WHERE " + KEY_ID + " = '" + id + "'" ;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
Из приведенного выше запроса я могу получать только по одному с одним идентификатором. Я хочу получить несколько столбцов с несколькими идентификаторами.
Пожалуйста, поясните вашу конкретную проблему или добавьте дополнительные сведения, чтобы выделить именно то, что вам нужно. В настоящее время трудно сказать, о чем вы спрашиваете. См. Страницу Как спросить, чтобы прояснить этот вопрос.
Пожалуйста, обновите вопрос, указав более подробную информацию.
это очень основы SQL, вам следует изучить его перед тем, как начать его использовать. Вы можете использовать WHERE id in (2,5) вместо WHERE id = 2
get multiple coloumn также вы, вероятно, имеете в виду несколько строкМожете ли вы, пожалуйста, отправить запрос
+ " WHERE " + KEY_ID + " in( '" + id1 + "','" + id2 +"')"пожалуйста, приложите немного усилий. Мы не должны выполнять всю задачу за вас.
Вот код, который нужно использовать для получения нескольких записей
selectQuery = "SELECT * FROM " + Table_STOCK + " WHERE " + KEY_ID + "='" + id2+ "' AND " + KEY_ID + " = '" + id5";
Есть несколько способов получить данные с помощью условия.
Но для этого вы должны подтвердить, что сколько строк вы должны получить
Да, необходимо заранее определить, сколько строк он должен получить.
Ознакомьтесь с моим решением, и если оно вам покажется динамичным, тогда проголосуйте за :)
Я уже упоминал, есть много способов получить. Но в вопросе он не упоминает динамический, он знает, сколько строк ему нужно было получить.
Хорошо, но ответ всегда должен быть динамичным, чтобы, если в будущем кому-то понадобится решение, оно должно быть выгодным для всех.
Спасибо @ShaifaliRajput
Для этого можно использовать ключевое слово IN:
String commaSeparatedIds = "1, 2, 3, 4, 5";
String selectQuery = "SELECT * FROM " + Table_STOCK + "
WHERE " + KEY_ID + " IN (" + commaSeparatedIds + ")" ;
А вот небольшой вспомогательный метод для создания commaSeparatedString из списка идентификаторов без дополнительных библиотек:
private String toCommaSeparatedString(List<Integer> list) {
if (list.size() > 0) {
StringBuilder nameBuilder = new StringBuilder();
for (Integer item : list) {
nameBuilder.append(item).append(", ");
}
nameBuilder.deleteCharAt(nameBuilder.length() - 1);
nameBuilder.deleteCharAt(nameBuilder.length() - 1);
return nameBuilder.toString();
} else {
return "";
}
}
Еще проще с общими библиотеками apache, как описано здесь: Java: объединить массив примитивов с разделителем (Но имейте в виду, что это иногда вызывает проблемы с Android <4.4)
Вы можете просто добавить идентификаторы в список массивов и вызвать этот метод, остальное этот метод позаботится обо всем, это динамический подход, потому что здесь вы можете передать столько идентификаторов, сколько сможете. Просто отредактируйте объект, используя свою собственную модель данных.
public ArrayList<Object> getContent(ArrayList<String> list) {
ArrayList<Object> objList = new ArrayList<>();
if (list!=null && !list.isEmpty()){
SQLiteDatabase db = getReadableDatabase();
//Check for list items
for(int i =0;i<list.size();i++) {
Cursor cursor = db.query(Table_STOCK, null,
KEY_ID + " = ?",
new String[]{list.get(i)}, null, null, null, null);
Object obj=null;
if (cursor != null) {
cursor.moveToFirst();
// Set your object properties extracting from cursor
obj = new Object();
obj.setColumn1Property(cursor.getString(cursor.getColumnIndex(Table_STOCK.COLUMN_1)));
obj.setColumn2Property(cursor.getString(cursor.getColumnIndex(Table_STOCK.COLUMN_2)));
}
if (cursor != null) {
cursor.close();
}
//Add extracted object in your list.
objList.add(obj);
}
}
return objList;
//Return rows list from your database.
}
Пожалуйста, добавьте подробности в свой вопрос. И, пожалуйста, поищите ответ, прежде чем публиковать его. Я думаю, что проблема, с которой вы столкнулись, обычная.