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

标签 android database sqlite updates

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

相关文章:

java - org.hibernate.InstantiationException : Cannot instantiate abstract class or interface: device. 处置

mysql - 如何用MySQL中以前的非零值替换零值?

Android/Linux ioctl FIONREAD 失败

Android - 蓝牙发现未找到任何设备

sql-server - 查找 Azure SQL 数据库中的性能问题

c - 在没有额外查询的情况下获取 SQLite3 中受 UPDATE 影响的行

SQL 查询 - 列表字段

SQLite 舍入

java - 改变方向 Android 设备

Java:如何在 CameraX previewView 上绘图?