Ich habe versucht, alle Zeilen aus der SQLite-Datenbank zu erhalten. Ich habe aber nur die letzte Reihe von den folgenden Codes erhalten.
FileChooser-Klasse:
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-Klasse:
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;
}
Bitte sag mir, wo ist mein Fehler? Schätzen.
versuchen:
Cursor cursor = db.rawQuery("select * from table",null);
UND für List<String>
:
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
String name = cursor.getString(cursor.getColumnIndex(countyname));
list.add(name);
cursor.moveToNext();
}
}
Dies ist fast die gleiche Lösung wie die anderen, aber ich dachte, es wäre gut, verschiedene Wege zu sehen, um dasselbe Ergebnis zu erzielen und ein wenig zu erklären:
Wahrscheinlich haben Sie die Tabellenname String-Variable zu dem Zeitpunkt initialisiert, zu dem Sie den DBHandler aufgerufen haben.
private static final String MYDATABASE_TABLE = "anyTableName";
Dann, wo immer Sie versuchen, alle Tabellenzeilen abzurufen;
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();
Ehrlich gesagt gibt es viele Möglichkeiten, dies zu tun,
Wenn Sie jede Spalte und jede Zeile haben möchten, übergeben Sie einfach null
für die Parameter SQLiteDatabase
column
und selection
.
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null, null);
Die anderen Antworten verwenden rawQuery
, Sie können jedoch die eingebauten SQLiteDatabase
von Android verwenden. Die documentation for query
besagt, dass Sie einfach null
an den Parameter selection
übergeben können, um alle Zeilen abzurufen.
selection
Wenn Sie null übergeben, werden alle Zeilen für die angegebene Tabelle zurückgegeben.
Und während Sie auch null
für den Parameter column
übergeben können, um alle Spalten zu erhalten (wie im obigen Einzeiler), ist es besser, nur die benötigten Spalten zurückzugeben. Die Dokumentation sagt
columns
Bei der Übergabe von null werden alle Spalten zurückgegeben. Es wird davon abgeraten, Daten aus dem Speicher zu lesen, die nicht verwendet werden.
Beispiel
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);
Ich habe das gleiche Problem untersucht! Ich denke, Ihr Problem hängt damit zusammen, wo Sie die Variable identifizieren, mit der Sie die zurückgegebene ArrayList auffüllen. Wenn Sie es innerhalb der Schleife definieren, referenziert es immer die letzte Zeile in der Tabelle in der Datenbank. Um dies zu vermeiden, müssen Sie es außerhalb der Schleife identifizieren:
String name;
if (cursor.moveToFirst()) {
while (cursor.isAfterLast() == false) {
name = cursor.getString(cursor
.getColumnIndex(countyname));
list.add(name);
cursor.moveToNext();
}
}
queueAll()
-Methode wie folgt aktualisieren:
public Cursor queueAll() {
String selectQuery = "SELECT * FROM " + MYDATABASE_TABLE;
Cursor cursor = sqLiteDatabase.rawQuery(selectQuery, null);
return cursor;
}
readFileFromSQLite()
-Methode wie folgt aktualisieren:
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;
}
public List<String> getAllData(String email)
{
db = this.getReadableDatabase();
String[] projection={email};
List<String> list=new ArrayList<>();
Cursor cursor = db.query(TABLE_USER, //Table to query
null, //columns to return
"user_email=?", //columns for the WHERE clause
projection, //The values for the WHERE clause
null, //group the rows
null, //filter by row groups
null);
// cursor.moveToFirst();
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(cursor.getColumnIndex("user_id")));
list.add(cursor.getString(cursor.getColumnIndex("user_name")));
list.add(cursor.getString(cursor.getColumnIndex("user_email")));
list.add(cursor.getString(cursor.getColumnIndex("user_password")));
// cursor.moveToNext();
} while (cursor.moveToNext());
}
return list;
}
Cursor cursor = myDb.viewData();
if (cursor.moveToFirst()){
do {
String itemname=cursor.getString(cursor.getColumnIndex(myDb.col_2));
String price=cursor.getString(cursor.getColumnIndex(myDb.col_3));
String quantity=cursor.getString(cursor.getColumnIndex(myDb.col_4));
String table_no=cursor.getString(cursor.getColumnIndex(myDb.col_5));
}while (cursor.moveToNext());
}
cursor.requery();