Ich schreibe eine Android-Einkaufsmanager-Anwendung und bin auf einen Fehler gestoßen, als ich versucht habe, eine meiner SQLite-Datenbanktabellen zu schließen.
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();
Das passiert bei anderen Aufrufen dieser Klasse nicht, und ich frage mich, ob es daran liegt, dass es hier eine Schleife mit vielen Aufrufen an die Datenbank gibt. Der Fehler ist SQLite Exception: unable to close due to unfinalised statements
.
Die Fehlerzeile aus der Klasse "ItemsDb" ist hier
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();
}
Offenbar hat SQLite3 eine finalize-Methode für die Zerstörung der vorherigen DB-Aufrufe, aber ich bin nicht sicher, wie diese zu implementieren oder sogar, wenn es hier notwendig ist.
Jede Hilfe in dieser Sache wäre großartig.