我在Android,ICS上使用SQLite。当我进行更新时,我得到SQLiteReadOnlyDatabaseException
。这很奇怪,因为我用SQLiteOpenHelper.getWritableDatabase()
创建了它。此外,我在myDB.isReadonly()
更新发生之前测试了数据库是否只读。 Gingerbread上不会发生此异常。我怀疑它与Android版本的不同版本的sqlite有关。
这是我创建数据库的代码。
protected static class DBHelper extends SQLiteOpenHelper {
DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CreateStatements.CREATE_MOVIES);
...
}
public class DBAdapter {
public static final String PACKAGE_NAME =
protected DBHelper dbHelper;
protected Context context;
protected SQLiteDatabase myDB;
public CreateStatements statement;
public DBAdapter(Context context) {
this.context = context;
}
public void open() throws SQLException {
dbHelper = new DBHelper(context);
myDB = dbHelper.getWritableDatabase();
myDB.setLockingEnabled(false);
}
public void close() {
myDB.close();
}
...
}
答案 0 :(得分:0)
我最近遇到过。以下是如何解决的问题:
try{
myDB = dbHelper.getWritableDatabase();
} catch (SQLiteReadOnlyDatabaseException e){
Log.d(TAG, "SQLiteReadOnlyDatabaseException");
startActivity(new Intent(context, MainActivity.class));
}
更新数据库时,它会保留与旧数据库的某些连接。在数据库升级后再次执行new DBHelper(context)
时,帮助程序会链接回旧数据库。因此,您需要关闭此类并重新初始化它。在我的例子中,MainActivity是首先初始化dbHelper的类。因此,当捕获异常并重新启动活动时,将删除与旧数据库的连接,并且它可以正常工作。