gpt4 book ai didi

Android SQLite 异常 : unable to close due to unfinalised statements

转载 作者:IT王子 更新时间:2023-10-29 06:21:50 24 4
gpt4 key购买 nike

我正在编写一个 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 有一个 finalize 方法来销毁以前的数据库调用,但我不确定如何实现它,或者即使它在这里是必要的。

在这方面的任何帮助都会很棒。

最佳答案

看来问题与游标有关,谢谢 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”似乎可以解决问题。

关于Android SQLite 异常 : unable to close due to unfinalised statements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9348603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com