sql >> Databáze >  >> RDS >> SQLite

Nelze zabránit úniku objektu SQLiteConnection

Říkáte, že jste se podívali na mnoho otázek online, ale rozhodně jste se nezabývali tímto nebo tímto. Doslova to trvalo 5 minut hledání.

Každopádně, kdybych byl vámi, k vyřešení tohoto problému bych zahrnul finally klauzule při uzavírání spojení. To znamená, že byste svou pomocnou databázi deklarovali jako statickou proměnnou instance a použili byste vzor Abstract Factory k zaručení vlastnosti singleton.

Vaše varování se děje, protože nezajišťujete, že pouze jeden DatabaseHelper bude někdy existovat v daném čase. Pokud mInstance objekt nebyl inicializován, bude vytvořen. Pokud již byl vytvořen, bude jednoduše vrácen.

Zde je kód:

public ArrayList<ItemSubject> loadDataSubject() {
    ArrayList<ItemSubject> arrayList = new ArrayList<>();
    String select = "select * from " + TABLE_SUBJECT;
    Cursor cursor = getData(select);
    
    
    if (cursor != null && cursor.getCount() > 0) {
    try {
        cursor.moveToFirst();
            for (int i = 0; i < cursor.getCount(); i++) {
                String id = cursor.getString(cursor.getColumnIndex(TAG_ID));
                String course = cursor.getString(cursor.getColumnIndex(TAG_COURSE_NAME));
         ....
                ItemSubject objItem = new ItemSubject(id, courseId,...);
                arrayList.add(objItem);
                cursor.moveToNext();
           }
       finally {
           if (cursor != null)
           cursor.close();
       }
   }
   return arrayList;
}    

Ale protože říkáte, že mým jediným příspěvkem k vaší otázce (která již byla zodpovězena v jiných příspěvcích) je upřesnění vaší chybějící základní angličtiny, pak si nejsem jistý, zda to můžete přijmout jako adekvátní odpověď.




  1. Snímky databáze SQL Server -3

  2. SQL Transponujte řádky jako sloupce

  3. aktualizační dotaz se spojením dvou tabulek

  4. Jak získat počet řádků ve sqlite pomocí Androidu?