gpt4 book ai didi

android - 当应用程序附带数据库以发布新版本时更新 SQLite 数据库

转载 作者:搜寻专家 更新时间:2023-10-30 23:45:30 24 4
gpt4 key购买 nike

我正在将数据库文件与我们的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com