好的,所以我在这里使用http://mobisys.in/blog/2012/01/tutorial-using-database-in-android-applications/本教程创建了一个预制数据库。我一直在收到有关“数据库未关闭异常”的错误。以及一些错误发送到我的openDatabase。我的数据库类有什么问题吗?
public void openDataBase() throws SQLException{
//Open the database
String myPath = DB_PATH + DB_NAME;
myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
//*Kalikot Delete pag may problema*//
public DbHerbs openWritable()throws SQLException{
// ourHelper = new DbHelper(ourContext);
myDatabase = this.getWritableDatabase();
return this;
}
public DbHerbs openReadOnly()throws SQLException{
myDatabase = this.getReadableDatabase();
return this;
}
public void close() {
if (myDatabase != null) {
myDatabase.close();
}
// super.close();
}
以下是我如何在不同的片段上打开课程,
private void openDb() {
myDb = new DbHerbs(this.getActivity());
try {
myDb.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDb.openReadOnly();
}catch(SQLException sqle){
throw sqle;
}
private void closeDb()
{
myDb = new DbHerbs(this.getActivity());
myDb.close();
}
这就是我对日志猫的错误。 http://www.directupload.net/file/d/4117/usgahftz_jpg.htm
答案 0 :(得分:1)
您不是在这里关闭数据库:
private void closeDb()
{
myDb = new DbHerbs(this.getActivity());
myDb.close();
}
您正在用新的数据库替换现有的数据库实例并关闭新数据库。旧的将在打开状态下进行垃圾收集。所以实际上closeDb()并没有做任何事情。
为什么每次需要读取权限时都尝试创建数据库实例?
private void openDb() {
myDb = new DbHerbs(this.getActivity());
try {
myDb.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
try {
myDb.openReadOnly();
}catch(SQLException sqle){
throw sqle;
}
如果您要做的是复制放置在assets文件夹中的预制数据库,建议的方法是https://github.com/jgilfelt/android-sqlite-asset-helper
当你需要读取或写入数据库时,你应该在SQLiteOpenHelper上调用getReadableDatabase()和getWritableDatabase()。你会在android样本中找到完整的工作代码。