2013-04-25 49 views
-1

我有我的數據庫連接設置中的應用程序,但logcat的保持的向我講述了一個SQLite泄漏的Android SQLite的泄露錯誤

04-25 11:22:23.771: W/SQLiteConnectionPool(9484): A SQLiteConnection object for database '+data+data+com_appstart+databases+database' was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed. 

我開始懷疑是否是到我如何使用數據庫適配器。 我附上我的代碼... 這是我的代碼,其中一些時間,我發現錯..

try{ 

    DBAdapter dba = new DBAdapter(this); 
    dba.open(); 

    Cursor c = dba.getModules(Constant.LANGUAGE_ID); 

    for (int i = 0; i < c.getCount(); i++) { 
     if (i > 2) { 

      a.add(c.getString(2)); 
      moduleid.add(c.getString(0)); 
      icon_name.add(c.getString(1)); 

      System.out.println(c.getString(2) + "------" + c.getString(0)); 

     } 
     c.moveToNext(); 
    } 

    c.close(); 
    dba.close(); 
}catch(Exception e){ 
    e.printStackTrace(); 
} 

這是我將對DBAdapter類,它包含open()和關閉()方法。

public DBAdapter open() throws SQLException { 
    db = DBHelper.getWritableDatabase(); 
    return this; 
} 
public void close() { 
    DBHelper.close(); 
} 

回答

1

什麼是您正在使用的DBAdapter類?我不知道它在做什麼,所以我不知道它是否正確。您應該檢查獲取的SQLiteConnection對象的錯誤消息引用的位置,並確保該SQLiteConnection是close()d。

您是否偶爾或始終都會收到錯誤?這可能不是您觀察的主要問題,但是當close()之前有異常時,您的代碼也無法調用close()。您應該確保close()方法被用一個try/finally塊守護着它,無論異常路徑的叫:

dba.open(); 
try { 
    Cursor c = ...; 
    try { 
    ... 
    } finally { 
    c.close(); 
    } 
} finally { 
    dba.close(); 
} 
1

你的問題是,你有一次你完成數據庫操作"Close"數據庫。所以,無論您打開數據庫的位置如何關閉數據庫。

+0

我使用DBAdapter類進行數據庫連接,並且此類包含Close和Open方法。所以,當我需要任何數據庫表我打開這adpater,並在我用我關閉此adapter.but後有時我得到這個錯誤,沒有數據會被發現。 – 2013-04-25 06:05:35

+0

確保您關閉所有打開的數據庫?否則您發佈您的代碼我可以檢查它,如果可能,我會幫你.. – Subburaj 2013-04-25 06:07:26

+0

等一分鐘我發佈我的代碼... – 2013-04-25 06:08:04

1
中將對DBAdapter類

,在關閉功能取代從db.close DBHelper.close()();

public void close() { 
    DBHelper.close(); 
} 

用下面的替換;

public void close() { 
    db.close(); 
} 
0
public DBAdapter open() throws SQLException { 
    db = DBHelper.getWritableDatabase(); 
//You should close the opened database 
DBhelper.close 
    return this; 

同樣也去了遊標一旦你打開了它,它需要被關閉。