2012-04-11 22 views
34

Ho cercato di ottenere tutte le righe dal database SQLite. Ma ho ottenuto solo l'ultima riga dai seguenti codici.Ottieni tutte le righe da SQLite

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

dirmi dove è il mio errata. Apprezzare.

+0

Qual è il valore di cursor.getCount()? – Anirudh

+0

@Anirudh Non capisco.Potresti spiegarmi per favore? – Yoo

+0

Puoi inserire questa frase nel tuo codice - Log.d ("TAG", "File recuperate -" + cursor.getCount()); e dimmi che valore vedi? Questo è il numero di righe che il cursore ha recuperato. Fallo prima di restituire il cursore nel metodo queueAll(). – Anirudh

risposta

69

prova:

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

E per List<String>:

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

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

Il risultato è lo stesso, ottiene solo l'ultima riga. – Yoo

+0

stampa 'cursor.getCount();' E il risultato? –

+0

Ho appena provato. Il risultato di cursor.getCount() è 1. Forse il problema si è verificato durante l'inserimento dei dati. – Yoo

2

ho cercato lo stesso problema! Penso che il tuo problema sia legato al punto in cui identifica la variabile che usi per compilare l'ArrayList che restituisci. Se lo si definisce all'interno del ciclo, farà sempre riferimento all'ultima riga della tabella nel database. Per evitare questo, è necessario identificare al di fuori del ciclo:

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

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

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

Come questo rende la tua risposta diversa o più utile? – Shubham

2

Questa è quasi la stessa soluzione come gli altri, ma ho pensato che potrebbe essere buono per guardare diversi modi di ottenere lo stesso risultato e spiegate un po ':

Probabilmente avete il nome della tabella variabile String inizializzato nel momento in cui avete chiamato DBHandler, quindi sarebbe qualcosa di simile;

private static final String MYDATABASE_TABLE = "anyTableName"; 

Quindi, ovunque si stia cercando di recuperare tutte le righe della tabella;

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

Onestamente, ci sono molti modi per fare questo,

0

Aggiornamento queueAll() metodo come di seguito:

Aggiornamento readFileFromSQLite() metodo come di seguito:

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

Le altre risposte utilizzano rawQuery. Il documentation per SQLiteDatabase indica che è possibile passare semplicemente null al parametro selection della query per ottenere tutte le righe.

selection Il passaggio null restituirà tutte le righe per la tabella specificata.

Esempio

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); 
0
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(); 
Problemi correlati