Получить все строки из 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;
}
Скажите, пожалуйста, где моя ошибка. Цените.
Ответы
Ответ 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);