47 votes

Obtenir toutes les lignes de SQLite

J'ai essayé d'obtenir toutes les lignes de la base de données SQLite. Mais je n'ai eu que la dernière ligne des codes suivants.

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

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

S'il vous plaît dites-moi où est mon incorrect. Apprécier.

89voto

Samir Mangroliya Points 21263

essayer:

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

ET pour List<String> :

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

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

4voto

ArtiomLK Points 309

C'est presque la même solution que les autres, mais j'ai pensé qu'il serait peut-être bon d'examiner différentes manières d'obtenir le même résultat et d'expliquer un peu :

Vous avez probablement initialisé la variable de chaîne de nom de table au moment où vous avez appelé le DBHandler, donc ce serait quelque chose comme;

 private static final String MYDATABASE_TABLE = "anyTableName";

Ensuite, partout où vous essayez de récupérer toutes les lignes du tableau ;

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

Honnêtement, il y a plusieurs façons de le faire,

1voto

Sam Khalil Points 27

Je me suis penché sur le même problème ! Je pense que votre problème est lié à l'endroit où vous identifiez la variable que vous utilisez pour remplir l'ArrayList que vous retournez. Si vous le définissez à l'intérieur de la boucle, il référencera toujours la dernière ligne de la table dans la base de données. Afin d'éviter cela, vous devez l'identifier en dehors de la boucle :

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

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

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

1voto

Ferdous Ahamed Points 12001

Mettez à jour la queueAll() comme ci-dessous :

 public Cursor queueAll() {

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

     return cursor;
}

Mettez à jour la readFileFromSQLite() comme ci-dessous :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X