sql >> Database teknologi >  >> RDS >> SQLite

SQLite database læk fundet

Er ikke sikker på, at du bruger SQLiteOpenHelper korrekt... du behøver ikke den myDataBase felt, er ideen, at den administrerer din databaseforbindelse for dig. Underklasser ikke på den måde... medmindre du gør ting i onCreate() osv., der ikke er postet her, ser det ud til, at du bare kan bruge SQLiteOpenHelper direkte, dvs.:

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

Forudsat at afslutning af aktiviteten også skulle stoppe din baggrundsopgave, vil jeg anbefale at kalde AsyncTask.cancel(true) fra din Activity.onPause() . Sørg for, at databasen er ryddet op fra onCancelled().

Og hvis din baggrundsopgave er det eneste, der læser databasen, så lad den eje SQLiteOpenHelper-instansen. Det er nemt at komme i problemer med statiske data, så det er bedst at undgå IMHO. Jeg ville gøre sådan noget:

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. MariaDB LCASE() Forklaret

  2. Android-rum - Sådan rydder du sqlite_sequence for alle tabeller

  3. Database-omlægninger – hvorfor de betyder noget

  4. Fordele og sikkerhed i Amazon Relational Database Service