如何在安卓中解决"Trying to reopen a closed SQLite database"



我一直在构建一个android应用程序,使用SQLiteOpenHelper来管理SQLite数据库。应用程序SQLite的数据库工作正常,我似乎可以找到任何错误,我检查了我在每个SQLite数据库操作上调用new SQLiteOpenHelper().close()以防止数据泄漏。但是几个月后,我得到一个错误告诉我,我试图重新打开一个已经关闭的sqliteddatabase。但是我又检查了一遍,似乎没有发现任何问题。我很困惑,不知道是什么问题。任何帮助都是感激的。提前谢谢。

编辑

这是产生错误的代码。Android studio报告line where出错

Cursor result = db.rawQuery(selectStmt, null)存在

public List<DataModel> getAssignmentData() {
List<DataModel> data = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
String selectStmt
= "SELECT " + COLUMN_ASSIGNMENT_TITLE + ", "
+ COLUMN_SUBMISSION_DATE + ", "
+ COLUMN_ASSIGNMENT_DESCRIPTION + ", "
+ COLUMN_LECTURER_NAME + ", "
+ COLUMN_COURSE_CODE + ", "
+ COLUMN_ATTACHED_IMAGE + ", "
+ COLUMN_ID + ", "
+ COLUMN_SUBMITTED + " FROM " + ASSIGNMENT_TABLE;
Cursor result = db.rawQuery(selectStmt, null);
if (result.moveToFirst()) {
do {
String title = result.getString(0);
String date = result.getString(1);
String description = result.getString(2);
String lecturerName = result.getString(3);
String course = result.getString(4);
String attachedImages = result.getString(5);
int id = result.getInt(6);
boolean submitted = result.getInt(7) == 1;
AssignmentModel assignment = new AssignmentModel();
assignment.setTitle(retrieveEntry(title));
assignment.setDate(date);
assignment.setDescription(retrieveEntry(description));
assignment.setLecturerName(retrieveEntry(lecturerName));
assignment.setCourseCode(course);
assignment.setAttachedImage(attachedImages);
assignment.setPosition(id);
assignment.setSubmitted(submitted);
data.add(assignment);
} while (result.moveToNext());
}
result.close();
return data;
}

AndroidSQLiteDatabase内部有一个简单的引用计数。new SQLiteOpenHelper()构造函数调用不打开数据库,即增加引用计数,但调用close()将减少它,可能使您因其他原因打开的SQLiteDatabase引用无效。

不是将close()与构造函数调用配对,而是将它们与实际打开的数据库配对,例如getWritableDatabase()getReadableDatabase()。如果你多写点代码,我们可以更好地帮助你。

最新更新