sql >> Database >  >> RDS >> SQLite

SQLite-databaselek gevonden

Ik weet niet zeker of je SQLiteOpenHelper gebruikt correct... je hebt die myDataBase niet nodig veld, is het de bedoeling dat het uw databaseverbinding voor u beheert. Subclasseer niet op die manier... tenzij je dingen doet in onCreate() enz. die hier niet zijn gepost, lijkt het alsof je gewoon SQLiteOpenHelper kunt gebruiken rechtstreeks, d.w.z.:

SQLiteOpenHelper sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
    DB_VERSION_NUMBER);

Ervan uitgaande dat het beëindigen van de activiteit ook uw achtergrondtaak moet stoppen, raad ik aan om AsyncTask.cancel(true) te bellen. van uw Activity.onPause() . Zorg ervoor dat de database is opgeschoond vanuit onCancelled().

En als uw achtergrondtaak het enige is dat de database leest, maak deze dan eigenaar van de SQLiteOpenHelper-instantie. Het is gemakkelijk om in de problemen te komen met statische gegevens, dus IMHO kunt u dit het beste vermijden. Ik zou zoiets als dit doen:

protected class BackTask extends AsyncTask<String, Integer, String>
{
    private SQLiteOpenHelper sqlite;

    public void BackTask(Context ctx) {
        sqlite = new SQLiteOpenHelper(ctx, DB_PATH+DB_NAME, null,
                                      DB_VERSION_NUMBER);
    }
    @Override
    protected String doInBackground(String... params) 
    {
         try {
                //get requeste data from the database
                //access the web service
                return result;

              } catch (Exception e) { 
         }
         return null;
    }

    @Override
    protected void onCancelled() {
         sqlite.close();
    }

    @Override
    protected void onPostExecute(String result)
         sqlite.close();
         // Update UI here
    }
}


  1. Verschil tussen Oracle jdbc-stuurprogrammaklassen?

  2. Geen gegevens meer om uit socket te lezen

  3. Hoe installeer ik libpq-fe.h?

  4. mysqli:kan het meerdere queries in één statement voorbereiden?