jeudi 24 décembre 2015

On Upgrade Database Android Sqllite

I have one android application for quotes. I have used sqllite database for it. its located in assets folder and creating and copying data when its load first time. I have not used first time database version. in second version I have used Database version. Now in third update I want remove old database without version and with version data and want create new database. My current code is like below. What changes I need to do so it can delete old database and create and copy new database ? Thanks

public class DataBaseHandler extends SQLiteOpenHelper {

        // The Android's default system path of your application database.
        private static String DB_PATH;

        private static String DB_NAME = "SuccessQuotesNew";

        private SQLiteDatabase myDataBase;
        private static final int DATABASE_VERSION = 1;

        private final Context myContext;
        

        /**
         * Constructor Takes and keeps a reference of the passed context in order to
         * access to the application assets and resources.
         * 
         * @param context
         */
        public DataBaseHandler(Context context) {

                super(context, DB_NAME, null, DATABASE_VERSION);
                this.myContext = context;
                DB_PATH = context.getDatabasePath(DB_NAME).toString();
                Log.e("path", DB_PATH);
        }

        // ==============================================================================

        /**
         * Creates a empty database on the system and rewrites it with your own
         * database.
         * */
        public void createDataBase() throws IOException {

                boolean dbExist = checkDataBase();

                if (dbExist) {
                        // do nothing - database already exist
                } else {

                        // By calling this method and empty database will be created into
                        // the default system path
                        // of your application so we are gonna be able to overwrite that
                        // database with our database.
                        this.getReadableDatabase();

                        try {

                                copyDataBase();

                        } catch (IOException e) {

                                throw new Error("Error copying database");

                        }
                }

        }

        // ==============================================================================

        /**
         * Check if the database already exist to avoid re-copying the file each
         * time you open the application.
         * 
         * @return true if it exists, false if it doesn't
         */
        private boolean checkDataBase() {

                SQLiteDatabase checkDB = null;

                try {
                        String myPath = DB_PATH;
                        checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

                } catch (SQLiteException e) {

                        // database does't exist yet.

                }

                if (checkDB != null) {

                        checkDB.close();

                }

                return checkDB != null ? true : false;
        }

        // ==============================================================================

        /**
         * Copies your database from your local assets-folder to the just created
         * empty database in the system folder, from where it can be accessed and
         * handled. This is done by transfering bytestream.
         * */
        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 db
                String outFileName = DB_PATH;

                // 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();

        }

        // ==============================================================================

        public void openDataBase() throws SQLException {

                // Open the database
                String myPath = DB_PATH;
                myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        }

        // ==============================================================================

        @Override
        public synchronized void close() {

                if (myDataBase != null)
                        myDataBase.close();

                super.close();

        }

        // ==============================================================================

        @Override
        public void onCreate(SQLiteDatabase db) {

        }

        // ==============================================================================

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

        }

Aucun commentaire:

Enregistrer un commentaire