首页 文章

在商店中发布新版本的Android应用程序时更新SQLite数据库

提问于
浏览
2

我在我的Android应用程序中使用sqlite,我的数据库文件名为data.db.假设我有两个表,其中一个是静态值(只读),第二个是保存动态值并将应用程序推送到playStore .

在下一个版本中,我更新了data.db,我更新了第一个表中的值,在第二个表中添加了新列,并添加了第三个新表,并将应用程序推送到PlayStore . 那么我如何检查用户是否正在更新应用程序以及保存现有数据的最佳方法是什么以及如何在更新而不是全新安装时以编程方式更新data.db?

6 回答

  • -1

    在这个例子中,你添加了一个新列,所以这种情况下的更改应该是这样的(这里你不会丢失你的数据) .

    @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " +
         "name_of_column_to_be_added" + " INTEGER";
        db.execSQL(sql);        
    }
    
  • 1
    private static String DB_PATH = Environment.getDataDirectory()+"/data/package-name/databases/";
    private static String DB_NAME = "name_of_the_database"; // student.db
    
    private void copyDataBase() throws IOException
    {
    
    
        // Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);
    
        // Path to the just created empty d inb
        String outFileName = DB_PATH + DB_NAME;
    
        // Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);
    
        // transfer bytes from the inputfile to the outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) 
        {
            myOutput.write(buffer, 0, length);
        }
        // Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();
    
        //Copy successful
        outFileName = DB_PATH + DB_SUCCESS;
        myOutput = new FileOutputStream(outFileName);
        myOutput.write(1);
        myOutput.flush();
        myOutput.close();
    }
    
  • 3

    我建议你使用http://www.activeandroid.com/库 . 它支持迁移 . 您只需要在 assets/migrations 文件夹中为 n 版本的数据库模型编写 [n].sql 文件 . Active android运行现有版本并应用所需的迁移 .

  • -2

    有两种方法

    1]更改了数据库版本,以便在用户更新应用程序 SQLiteOpenHelper's onUpgrade() 方法在此方法中执行时,您可以编写代码以删除表n根据新架构创建新表并发送网络调用以获取数据 .

    2]使用预安装的数据库推送应用程序 . 使用db版本创建数据库并将其保存在 assets 文件夹中 . 每当应用程序运行时比较资产版本's db & app' s db . 如果资产's db version is higher than app' s db那么这意味着您需要更新数据库 . 直接将Assete的db复制到文件夹结构中,并将delta调用发送到获取数据 .

  • -1
    package com.example.sqllite_db;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    public class DatabseAdapter extends SQLiteOpenHelper
    
    {
        public static String DatabaseName="NewDatabase";
        public static int DatabaseVersion=1;
    
        public DatabseAdapter(Context context) 
        {
            super(context,DatabaseName,null,DatabaseVersion);
            // TODO Auto-generated constructor stub
        }
    
        /*public static String TableUser="tb1";
        public static String keyId="id";
        public static String keyName="name";
        public static String keyPass="pass";*/
    
    
        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            // TODO Auto-generated method stub
            String createQuery="create table tb1(name text,pass text);";
            db.execSQL(createQuery);
            //String createQuery1="create table tb2(pass text);";//("+keyName+"text,"+keyPass+"text);"; 
            //db.execSQL(createQuery1);
    
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            // TODO Auto-generated method stub
            db.execSQL("drop table tb1");
            onCreate(db);
            //db.execSQL("drop table tb2");
            //onCreate(db);
    
        }
    
    }
    

    将数据库放入Upgrade方法中,然后再次调用其中的Create方法,并在上载新数据库时更新数据库 .

  • 1

    您可以使用SQLiteOpenHelper的onUpgrade方法 . 在onUpgrade方法中,您将oldVersion作为参数之一 .

    在onUpgrade中使用Switch case并在每种情况下使用版本号来跟踪为每个新版本的数据库发送的当前数据库版本 .

    最好从oldVersion循环到newVersion,一次递增1版本,然后升级数据库stepbystep . 当数据库版本1的人在很长一段时间后将应用程序升级到使用数据库版本7的版本并且应用程序因某些不兼容的更改而开始崩溃时,这非常有用 .

    然后,数据库中的更新将逐步完成,涵盖所有可能的情况,即合并为每个新版本完成的数据库更改,从而防止您的应用程序崩溃 .

相关问题