2012-02-19 40 views
9

我正在編寫android購物管理器應用程序,並在嘗試關閉我的SQLite數據庫表時遇到錯誤。Android SQLite異常:由於未處理的語句導致無法關閉

ItemsDb idb = new ItemsDb(this); 

idb.open(); 

ArrayList<String> itemNames = idb.getItemNames(); 

for(int i=0; i < itemNames.size(); i++){ 

    String itemName = itemNames.get(i); 

    String itemID = idb.getItemID(itemName); 
    String itemName = idb.getItemNames().get(i); 
    String itemPrices = idb.getItemPrices().get(i); 
    String itemQuantity = idb.getItemQuantities().get(i);    
    String dateBought = idb.getDateBought(itemName);  
    String decayRate = idb.getDecayRate(itemName); 
    String decayType = idb.getDecayType(itemName); 
    String lastDecay = idb.getLastDecay(itemName); 
    String prevQuantity = idb.getPreviousQuantity(itemName); 
} 

idb.close(); 

這並不與其他調用發生在這個類,所以,我想知道是否是因爲有很多電話來這裏的數據庫的循環。 錯誤是SQLite Exception: unable to close due to unfinalised statements

從「ItemsDb」類中的錯誤行是這裏

public ItemsDb(Context c){ 

     ourContext = c; 
    } 

    public ItemsDb open() throws SQLException{ 
     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

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

顯然sqlite3的有破壞先前的DB調用一個finalize方法,但我不知道如何實現這個或者即使有必要在這裏。

對此的任何幫助將是偉大的。

+0

你在聲明中使用了任何遊標嗎? – Jivings 2012-02-19 22:59:54

回答

6

似乎問題是光標相關,感謝Jivings。查詢數據庫後,我沒有關閉遊標,這意味着某些對數據庫的引用無效。

public String getName(String id) throws SQLException{ 
    String[] columns = new String[]{ KEY_ItemID, KEY_NAME}; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, KEY_ItemID + "='" + id + "'", null, null, null, null); 
    if(c != null){ 
     c.moveToFirst(); 
     String name = c.getString(1); 
     c.close(); 
     return name; 
    } 
    return null; 
} 

調用「c.close」似乎有伎倆。