Выбор одной строки из базы данных 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, Курсор.

Другие вопросы по тегам