我正在将数据库文件与我们的 android 应用程序一起发送。为此,我关注了 How to ship an Android application with a database?由 Danny Remington - OMS 回答.
现在我必须提供新版本,因为数据库模式已经改变,所以首先我将新的 db 文件从 assets 复制到 data/data 目录,并在 onUpgrade
中编写如下插入语句SqliteOpenHelper
的方法|类:
//rename the old database
new File(DB_PATH + DATABASE_NAME).renameTo(new File(DB_PATH + "DB_old"));
try
{
//copting new db file from assets to data/data dir
copyDataBase();
}
catch (IOException e)
{
e.printStackTrace();
}
SQLiteDatabase DB_old = SQLiteDatabase.openDatabase(DB_PATH + "DB_old", null, SQLiteDatabase.OPEN_READWRITE);
SQLiteDatabase DB_new = SQLiteDatabase.openDatabase(DB_PATH + "DB_new", null, SQLiteDatabase.OPEN_READWRITE);
//insert statement from old to new db
String query = "INSERT INTO DB_new.table1(user_id,user_name) SELECT * FROM DB_old.table1";
DB_new.execSQL(query);
DB_old.close();
DB_new.close();
//deleting old db file
new File(DB_PATH + "DB_old").delete();
但是插入语句抛出异常android.database.sqlite.SQLiteException: no such table: DB_new.table1
我怎样才能做到这一点。请帮助我。
最佳答案
在您的 sqlite 帮助程序中,有一个方法 onUpgrade
当您传递给 super 构造函数(SqliteOpenHelper
)的版本发生变化时触发。因此,您需要更改此数字,以便 onUpgrade
触发,然后将“重新安装”数据库的代码放入此方法中。
关于android - 当应用程序附带数据库以发布新版本时更新 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29247785/