Android What is the easist way Upgrade Database for existing DB

坚强是说给别人听的谎言 提交于 2019-12-10 12:25:09

问题


I hava app, and it has database, after published. I have add some tables to the my database.

How can I easily update new database with old database which was already installed phone before when a customer update this application on market.

Here is my Code. What should I write in onUpgrade?

public class DataBaseHelper extends SQLiteOpenHelper 
    { 

    //destination path (location) of our database on device 
    private static String DB_PATH = "";  
    private static String DB_NAME ="sorubankasi.sqlite";// Database name 
    private SQLiteDatabase mDataBase;  
    private final Context mContext; 
    private static final int DATABASE_VERSION = 2;// new versiyon
    private static final String tag = "stk"; 

    public DataBaseHelper(Context context)  
    { 
        super(context, DB_NAME, null, DATABASE_VERSION);// 1? its old Database Version 
        DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; 
        this.mContext = context; 
    }    

    public void createDataBase() throws IOException 
    { 

        boolean mDataBaseExist = checkDataBase(); 
        if(!mDataBaseExist) 
        { 
            this.getReadableDatabase(); 
            this.close(); 
            try  
            { 
                copyDataBase(); 
            }  
            catch (IOException mIOException)  
            { 
                throw new Error("ErrorCopyingDataBase"); 
            } 
        } 
    } 


        //Check that the database exists here: /data/data/your package/databases/Da Name 
        private boolean checkDataBase() 
        { 
            File dbFile = new File(DB_PATH + DB_NAME); 
            //Log.v("dbFile", dbFile + "   "+ dbFile.exists()); 
            return dbFile.exists(); 
        } 

        //Copy the database from assets 
        private void copyDataBase() throws IOException 
        { 
            InputStream mInput = mContext.getAssets().open(DB_NAME); 
            String outFileName = DB_PATH + DB_NAME; 
            OutputStream mOutput = new FileOutputStream(outFileName); 
            byte[] mBuffer = new byte[1024]; 
            int mLength; 
            while ((mLength = mInput.read(mBuffer))>0) 
            { 
                mOutput.write(mBuffer, 0, mLength); 
            } 
            mOutput.flush(); 
            mOutput.close(); 
            mInput.close(); 
        } 

        //Open the database, so we can query it 
        public boolean openDataBase() throws SQLException 
        { 
            String mPath = DB_PATH + DB_NAME; 
            //Log.v("mPath", mPath); 
            mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); 
            //mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

            Log.d(tag, "opendatabase " + mDataBase.getVersion());
            return mDataBase != null; 
        } 

        @Override 
        public synchronized void close()  
        { 
            if(mDataBase != null) 
                mDataBase.close(); 
            super.close(); 
        }

        @Override
        public void onCreate(SQLiteDatabase arg0) {

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }}

回答1:


If you're using SqliteOpenHelper you will need to increment database version to the new version.And then you will get method onUpgrade() called with the database instance and new version and the version the database is updating from.

@Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    //create upgrades needed between the two versions "oldVersion" to "newVersion"
    db.execSQL(newTableQuery);
    db.execSQL(dropTableQuery);
  }

Otherwise if you are using open database directly with no using of SqliteOpenHelper, you will have to check the database version by checking "yourDatabaseInstance.getVersion()" and if the database version is lower than a specific version, make new updates and then your database version to the new version using "yourDatabaseInstance.setVersion()"

if(yourDatabaseInstance.getVersion() < newDatabaseVersion)
{
      //create upgrades needed between the two versions "oldVersion" to "newVersion"
      yourDatabaseInstance.setVersion(newDatabaseVersion);
}



回答2:


Well I have solved with my way! just adding some codes in to createDatabase method.

public void createDataBase() throws IOException {

    boolean mDataBaseExist = checkDataBase();
    if (!mDataBaseExist) {

        this.getReadableDatabase();
        this.close();
        try {
            copyDataBase();
        } catch (IOException mIOException) {
            throw new Error("ErrorCopyingDataBase");
        }
        }
    else{
        SQLiteDatabase db = getReadableDatabase();
        if(db.getVersion()<DATABASE_VERSION){
        this.getReadableDatabase();
        this.close();
        try {
            copyDataBase();
        } catch (IOException mIOException) {
            throw new Error("ErrorCopyingDataBase");
        }
        }
    }

}

After all, I think best way is for upgrade is changing the database name..



来源:https://stackoverflow.com/questions/22502453/android-what-is-the-easist-way-upgrade-database-for-existing-db

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!