Выбор одной строки из базы данных sqlite с использованием rawQuery и rowid в Android
Я создал внешнюю базу данных SQLite, которая выглядит примерно так:
В моем приложении для Android я хочу загрузить все значения из одной строки, используя ROWID, и поместить их в массив. Например:
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);
Это вернуло бы все значения из строки 1: 51, 35, 63. Однако, это всегда возвращает только первое значение, в данном случае 51. Кроме того, cursor.getCount() всегда возвращает 1. Вот мой полный код:
db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1", null);
yData = new int[cursor.getCount()];
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
yData[i] = cursor.getInt(0);
cursor.moveToNext();
}
cursor.close();
}
db.close();
Спасибо за помощь.
3 ответа
Если я правильно понимаю, вам нужно вернуть значение каждого столбца из одной строки. Поскольку вы выбираете только одну строку и хотите получить значение из каждого столбца, вам нужно только получить индекс каждого столбца. и затем повторить их. Вот код, как это можно сделать.
Cursor cursor = db.rawQuery("SELECT * FROM Dairy WHERE ROWID = 1 Limit 1", null);
if (cursor.moveToFirst()) {
String[] columnNames = cursor.getColumnNames();
yData = new int[columnNames.length];
for (int i = 0; i < columnNames.length; i++) {
// Assume every column is int
yData[i] = cursor.getInt(cursor.getColumnIndex(columnNames[i]));
}
}
cursor.close();
db.close();
Вы всегда получаете одно и то же значение:
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
//cursor.getInt(0); You probably want to get 0, 1 & 2
yData[i] = cursor.getInt(0);
cursor.moveToNext();
}
cursor.close();
}
Метод getInt (int columnIndex) возвращает запрошенный столбец, а не всю строку. Принимая во внимание, что moveToFirst () и moveToNext () переместят курсор в первую или следующую строку, если курсор не пустой или если курсор не находится за последней строкой, если вызывается moveToNext (). Иначе оба вернут false.
Таким образом, в случае успеха курсор содержит полную строку, и вы можете получить доступ к элементам, либо предоставив индексы на основе 0 напрямую, либо получив индекс столбца с помощью getColumnIndex(String columnName), предоставив имя столбца для получения индекса этого столбца и получив доступ к нему. столбец тогда.
Вы можете обратиться к руководству разработчика Android, Курсор.