升级数据库

我有一个应用程序已经在谷歌商店。我正在使用一个内置数据库有3个表,并在首次启动应用程序时复制它。 现在我想升级到应用程序并添加另一个表。 以下是我的代码。

public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); DB_PATH = "/data/data/" + context.getPackageName() + "/databases/"; this.mContext = context; } public void createDataBase() throws IOException { //If database not exists copy it from the assets boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { this.getReadableDatabase(); this.close(); try { //Copy the database from assests copyDataBase(); Log.e(TAG, "createDatabase database created"); } 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); 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); return mDataBase != null; } @Override public synchronized void close() { if(mDataBase != null) mDataBase.close(); super.close(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); String sql = "CREATE TABLE IF NOT EXISTS CKRecordings (" + "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT , filepath TEXT , creationDate TEXT)"; db.execSQL(sql); db.execSQL("DROP TABLE IF EXISTS data"); onCreate(db); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } 

我想问几个问题。 上面的代码没有升级。

现在,如果我是该应用程序的新用户,是否必须编辑旧数据库并制作另一个CKRecording表并将其替换为置于资产或上述代码中的当前数据库,这对新用户也有效吗?

 super(context, DB_NAME, null, 1); 

在此语句中,最后一个参数是数据库版本.. 将其设置为2以用于新更新的APK。 所以现有用户可以有新添加的表或列。

在更新的apk onUpgrade将调用。 在那里你可以从资产中复制数据库。 但是现有用户将丢失数据..所以最好的选择是在数据库中动态添加表。