Tôi đang viết một ứng dụng quản lý mua sắm Android và đã gặp lỗi khi cố gắng đóng một trong các bảng cơ sở dữ liệu SQLite của mình.Ngoại lệ cho SQLite của Android: không thể đóng do tuyên bố không được khai báo
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();
này không xảy ra với các cuộc gọi khác đến lớp này như vậy và tôi tự hỏi nếu nó là bởi vì có một vòng lặp với rất nhiều cuộc gọi đến các cơ sở dữ liệu ở đây. Lỗi là SQLite Exception: unable to close due to unfinalised statements
.
Dòng lỗi từ lớp "ItemsDb" là ở đây
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();
}
Rõ ràng SQLite3 có một phương thức Finalize để phá hủy cuộc gọi DB trước nhưng tôi không chắc chắn làm thế nào để thực hiện điều này hoặc thậm chí nếu nó là cần thiết ở đây.
Bất kỳ trợ giúp nào về điều này đều tuyệt vời.
Bạn có đang sử dụng bất kỳ con trỏ nào trong báo cáo của mình không? – Jivings