如何升级只读sqlite数据库
我尝试更改为SQLiteDatabase.OPEN_READWRITE);
和getReadableDatabase();
结果仍然相同。
当我想将我的sqlite数据库从版本1升级到2时,我收到此错误:
SQLiteException: Can't upgrade read-only database from version X to Y
在我的应用程序的第一个版本中,我使用此代码:
private static final String DB_NAME = "this_the_database";
private final Context context;
private static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.context = context;
String path = context.getDatabasePath(DB_NAME).getAbsolutePath();
SQLiteDatabase db = null;
try {
db = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) { // DB not found
db = getReadableDatabase();
db.close();
// Copy DB from asset folder.
copyDatabase(path);
}
if (db != null) {
db.close();
}
}
当我决定使用它升级数据库时,它崩溃了
@Override
public void onCreate(SQLiteDatabase db) {
new DatabaseHelper(context).getReadableDatabase();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DB_NAME);
onCreate(db);
}
参考:http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
答案 0 :(得分:1)
为什么使用SQLiteDatabase.openDatabase?在DatabaseHelper构造函数中只调用super(..)就足够了。 getReadableDatabase()可以在open()方法中,也可以由打开数据库的活动调用。 在apidemos中,有一个LoaderThrottle示例,展示了如何使用Android SQLite数据库。
答案 1 :(得分:0)
您无法在create上获得可读数据库,但即使可以,数据库也已传入(SQLiteDatabase db),此时无法读取内容。 on create仅在首次在应用程序启动时创建数据库时调用,并且您只能在创建或升级时添加/删除列。那你想用这个来完成什么?