Conta il numero di tabelle nel database sqlite

Ho bisogno di un count delle tabelle che sono attualmente nel mio database sqlite. Ho cercato la ricerca ma non ho avuto alcun metodo diretto.

Ho provato questo metodo nel mio DbHelper.

  • Aprire il file pdf dal server utilizzando l'intento androido
  • L'arresto di applicazioni in Android M
  • Scanner di impronte digitali con camera
  • Impostazione proxy di emulatore Android
  • Android Marshmallow "Imansible riprodurre questo video" errore
  • Parametro di layout di Android InputType - come consentire decimali negativi?
  • public int countTables() { int count = 0; String SQL_GET_ALL_TABLES = "SELECT * FROM sqlite_master WHERE type='table'"; Cursor cursor = getReadableDatabase() .rawQuery(SQL_GET_ALL_TABLES, null); cursor.moveToFirst(); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { count++; getReadableDatabase().close(); } cursor.close(); return count; } 

    Ma questo metodo mi dà un count errato. Ho solo 3 tabelle nel mio DB, ma questo metodo restituisce il numero come 5. Che cosa potrebbe essere sbagliato con questo metodo. C'è un metodo diretto per get il count.

  • L'input ha stile diverso in messa a fuoco
  • React Native non può eseguire stacktrace
  • Fornitore di località connesso: c'è un modo per verificare se un aggiornamento della località non è riuscito?
  • Blocca tutto il modo per chiudere un'applicazione android
  • NoClassDefFoundError - Android 2.3.X
  • Come includere la libreria GitHub sul tuo progetto Android esistente in eclipse
  • 3 Solutions collect form web for “Conta il numero di tabelle nel database sqlite”

    Il tuo metodo va bene, puoi anche usare il SELECT count(*) ... Ma ci sono due tabelle create automaticamente android_metadata e sqlite_sequence , semplicemente prende in considerazione questi: 5 – 2 = 3 tabelle che hai creato.

    O poiché Squonk ha fornito un'eccellente documentazione su quando la sqlite_sequence e quando non esiste, consiglio questa query:

     SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name != 'android_metadata' AND name != 'sqlite_sequence'; 

    Alcuni puntatori per abbreviare il codice

    Tutto questo:

     cursor.moveToFirst(); for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { 

    Può essere compiuto come questo:

     while(cursor.moveToNext()) { 

    Cursor.moveToNext () restituisce true se esiste la row successiva. Se un nuovo cursore non è vuoto moveToNext () restituirà true e impostare questo indice nella prima posizione. Quando cursor.isAfterLast() == true , moveToNext () restituisce false.

    Ma se volete semplicemente contare quante righe sono nell'utilizzo del Cursore:

     int count = cursor.getCount(); 

    Infine, memorizzare il database scrivibile in una variabile.

     getReadableDatabase().close(); 

    Non ho testato questo, ma se getReadableDatabase () restituisce un nuovo object SQLiteDatabase each volta che stai semplicemente chiudendo questo nuovo database non appena lo hai creato … avrei chiuso il database una volta e avrei chiuso dopo che io hanno chiuso tutti i cursori che ho recuperato da esso.

     SQLiteDatabase database = getReadableDatabase(); ... database.close(); 

    Se si utilizza un sacco di query, considerare l'apertura del database in onResume () e la chiusura in onPause ().

    Trova i nomi di count e tabella

    trovare count

     ResultSet rs = st.executeQuery("select count(*) from sqlite_master as tables where type='table'"); System.out.println(rs.getInt(1)); 

    recuperare i nomi delle tabelle

     ResultSet rs2 = st.executeQuery("select name from sqlite_master as tables where type='table'"); while(rs2.next()) { String tid = rs2.getString(1); System.out.println(tid); } rs.close(); 

    Provare

      vvvvvv SELECT * FROM YourDataBaseName.sqlite_master WHERE type='table'; 

    Basta inserire il tuo DatabseName come mostrato.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.