Holen Sie sich alle Zeilen von SQLite

Lesezeit: 5 Minuten

Benutzer-Avatar
Yoo

Ich habe versucht, alle Zeilen aus der SQLite-Datenbank abzurufen. Aber ich habe nur die letzte Zeile von den folgenden Codes bekommen.

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 sagen Sie mir, wo mein Fehler ist. Im Wert steigen.

  • Was ist der Wert von cursor.getCount() ?

    – Anirudh

    11. April 2012 um 17:50 Uhr

  • @Anirudh Ich verstehe nicht. Könnten Sie mir das bitte erklären?

    – Jo

    12. April 2012 um 4:19 Uhr

  • Können Sie diese Anweisung in Ihren Code einfügen – Log.d (“TAG”, “Abgerufene Zeilen – ” + cursor.getCount()); und sagen Sie mir, welchen Wert sehen Sie? Das ist die Anzahl der Zeilen, die der Cursor abgerufen hat. Tun Sie dies, bevor Sie den Cursor in der Methode queueAll () zurückgeben.

    – Anirudh

    12. April 2012 um 22:49 Uhr

  • @Anirudh Wenn ich es vor queueAll() mache, wird es NullPointerException bekommen. Wenn ich es nach dem Cursor = fileSQLiteAdapter.queueAll(); mache, wird es 0 bekommen.

    – Jo

    15. April 2012 um 9:01 Uhr

  • Versuche dies…. androidtipsbynama.blogspot.in/2012/04/…

    – Vielfraß

    17. April 2012 um 5:47 Uhr

Benutzer-Avatar
Samir Mangrolia

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();
  }
}

  • Ich würde diese Lösung bei Bedarf selbst verwenden. Allerdings tue ich while (!cursor.isAfterLast())

    – ArtiomLK

    22. November 2016 um 5:30 Uhr

  • oder: DatabaseUtils.dumpCursorToString(readableDB.rawQuery(“select * from table”,null))

    – Malachiasz

    4. April 2018 um 13:45 Uhr

Benutzer-Avatar
Suragch

Verwenden der integrierten Methode von Android

Wenn Sie jede Spalte und jede Zeile wollen, dann geben Sie einfach weiter null für die SQLiteDatabase column und selection Parameter.

Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null, null);

Mehr Details

Die anderen Antworten verwenden rawQueryaber Sie können das integrierte Android verwenden SQLiteDatabase. Das Dokumentation zum query sagt, dass Sie einfach vorbeigehen können null zum selection Parameter, um alle Zeilen zu erhalten.

selection Das Übergeben von null gibt alle Zeilen für die angegebene Tabelle zurück.

Und während Sie auch passieren können null für die column Um alle Spalten zu erhalten (wie im obigen Einzeiler), ist es besser, nur die Spalten zurückzugeben, die Sie benötigen. Das Dokumentation sagt

columns Das Übergeben von null gibt alle Spalten zurück, was nicht empfohlen wird, um zu verhindern, dass Daten aus dem Speicher gelesen werden, 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);

Benutzer-Avatar
ArtiomLK

Dies ist fast die gleiche Lösung wie die anderen, aber ich dachte, es wäre gut, sich verschiedene Möglichkeiten anzusehen, um dasselbe Ergebnis zu erzielen, und ein wenig zu erklären:

Wahrscheinlich haben Sie die Tabellenname-String-Variable initialisiert, als Sie den DBHandler aufgerufen haben, also wäre es so etwas wie;

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,

Benutzer-Avatar
Sam Khalil

Ich habe mich mit dem gleichen Problem beschäftigt! Ich denke, Ihr Problem hängt damit zusammen, wo Sie die Variable identifizieren, mit der Sie die von Ihnen zurückgegebene ArrayList füllen. Wenn Sie es innerhalb der Schleife definieren, wird es immer auf die letzte Zeile in der Tabelle in der Datenbank verweisen. 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();
        }
}

Aktualisieren queueAll() Methode wie folgt:

public Cursor queueAll() {

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

     return cursor;
}

Aktualisieren readFileFromSQLite() Methode wie folgt:

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;
}

Benutzer-Avatar
roshan posakya

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();

Benutzer-Avatar
Spaß

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;
}

  • Willkommen beim Posten auf Stack Overflow. Bitte versuchen Sie, den Antworten Erklärungen hinzuzufügen. Tipps & Verbesserungen: Stellen Sie sicher, dass der Cursor nicht null ist, schließen Sie den Cursor in einem finally-Block und schreiben Sie einfach while(cursor.moveToNext()) {…}, if-do-while ist unnötig.

    – Elletlar

    2. August 2018 um 13:55 Uhr

1055360cookie-checkHolen Sie sich alle Zeilen von SQLite

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy