Подтвердить что ты не робот

Получить все строки из SQLite

Я пытаюсь получить все строки из базы данных SQLite. Но я получил только последнюю строку из следующих кодов.

Класс FileChooser:

public ArrayList<String> readFileFromSQLite() {

  fileName = new ArrayList<String>();

  fileSQLiteAdapter = new FileSQLiteAdapter(FileChooser.this);
  fileSQLiteAdapter.openToRead();
  cursor = fileSQLiteAdapter.queueAll();

  if (cursor != null) {
    if (cursor.moveToFirst()) {
      do {
        fileName.add(cursor.getString(cursor.getColumnIndex(FileSQLiteAdapter.KEY_CONTENT1)));
      } while (cursor.moveToNext());

    }
    cursor.close();
  }

  fileSQLiteAdapter.close();
  return fileName;
}

Класс FileSQLiteAdapter:

public Cursor queueAll() {
  String[] columns = new String[] { KEY_ID, KEY_CONTENT1 };

  Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns, null,
                null, null, null, null);
  return cursor;
}

Скажите, пожалуйста, где моя ошибка. Цените.

4b9b3361

Ответ 1

попробовать:

Cursor  cursor = db.rawQuery("select * from table",null);

И для List<String>:

if (cursor.moveToFirst()) {
  while (!cursor.isAfterLast()) {
    String name = cursor.getString(cursor.getColumnIndex(countyname));

    list.add(name);
    cursor.moveToNext();
  }
}

Ответ 2

Я искал ту же проблему! Я думаю, ваша проблема связана с тем, где вы идентифицируете переменную, которую используете для заполнения возвращаемого вами массива ArrayList. Если вы определяете его внутри цикла, он всегда будет ссылаться на последнюю строку в таблице в базе данных. Чтобы избежать этого, вы должны определить его вне цикла:

String name;
if (cursor.moveToFirst()) {

        while (cursor.isAfterLast() == false) {
            name = cursor.getString(cursor
                    .getColumnIndex(countyname));

            list.add(name);
            cursor.moveToNext();
        }
}

Ответ 3

Это почти то же самое решение, что и другие, но я подумал, что было бы неплохо посмотреть на разные способы достижения одного и того же результата и немного объяснить:

Вероятно, у вас есть имя таблицы String, инициализированное в то время, когда вы вызвали DBHandler, поэтому было бы что-то вроде:

private static final String MYDATABASE_TABLE = "anyTableName";

Затем, где бы вы ни пытались извлечь все строки таблицы,

SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from " + MYDATABASE_TABLE, null);

List<String> fileName = new ArrayList<>();
if (cursor.moveToFirst()){
   fileName.add(cursor.getString(cursor.getColumnIndex(COLUMN_NAME)));
   while(cursor.moveToNext()){
      fileName.add(cursor.getString(cursor.getColumnIndex(COLUMN_NAME)));
   }
}
cursor.close();
db.close();

Честно говоря, есть много способов сделать это,

Ответ 4

Обновить queueAll() метод, как показано ниже:

public Cursor queueAll() {

     String selectQuery = "SELECT * FROM " + MYDATABASE_TABLE;
     Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null);

     return cursor;
}

Обновить readFileFromSQLite() метод, как показано ниже:

public ArrayList<String> readFileFromSQLite() {

    fileName = new ArrayList<String>();

    fileSQLiteAdapter = new FileSQLiteAdapter(FileChooser.this);
    fileSQLiteAdapter.openToRead();

    cursor = fileSQLiteAdapter.queueAll();

    if (cursor != null) {
        if (cursor.moveToFirst()) {
            do 
            {
                String name = cursor.getString(cursor.getColumnIndex(FileSQLiteAdapter.KEY_CONTENT1));
                fileName.add(name);
            } while (cursor.moveToNext());
        }
        cursor.close();
    }

    fileSQLiteAdapter.close();

    return fileName;
}

Ответ 5

В других ответах используется rawQuery. documentation для SQLiteDatabase говорит, что вы можете просто передать null в параметр selection запроса, чтобы получить все строки.

selection Передача null вернет все строки для данной таблицы.

Пример

SQLiteDatabase db = mHelper.getReadableDatabase();
String[] columns = {
        MyDatabaseHelper.COLUMN_1,
        MyDatabaseHelper.COLUMN_2,
        MyDatabaseHelper.COLUMN_3};
String selection = null; // this will select all rows
Cursor cursor = db.query(MyDatabaseHelper.MY_TABLE, columns, selection,
        null, null, null, null, null);