Friday 5 February 2016

Copy SQLite database from assets folder

public class DatabaseManager extends SQLiteOpenHelper {

    // *************** Declare all the global variable *******************//
    private Context myContext;
    private String PACKAGE_NAME = "YOUR_PACKAGE_NAME";

    // path of your datbase
    private String DB_PATH = Environment.getDataDirectory() + "/data/"
            + PACKAGE_NAME + "/databases/";

    // the extension may be .sqlite or .db
    private static String DB_NAME = "YOUR_DATABASE_NAME";
    private static String DB_ASSETNAME = "YOUR_ASSET_DATABASE_NAME";
    public SQLiteDatabase myDataBase;
    private ContentValues contentValues;

    private Cursor cursor;
    private ArrayList> arrayList;
    private ArrayList array_list;
    private HashMap hashMap;

    private SimpleDateFormat dateformat, timeformat;

    public DatabaseManager(Context context) throws IOException {
        super(context, DB_NAME, null, 1);
        // this.myDataBase = getWritableDatabase();
        this.myContext = context;
        boolean dbexist = checkdatabase();
        if (dbexist) {
            // System.out.println("Database exists");
            opendatabase();
        } else {
            System.out.println("Database doesn't exist");
            createdatabase();
        }
    }

    public void createdatabase() throws IOException {
        boolean dbexist = checkdatabase();
        if (dbexist) {
            System.out.println(" Database exists.");
        } else {
            this.getReadableDatabase();
            try {
                copydatabase();

            } catch (IOException e) {
                throw new Error("Error copying database");
            }
        }
    }

    private boolean checkdatabase() {
        // SQLiteDatabase checkdb = null;
        boolean checkdb = false;
        try {
            String myPath = DB_PATH + DB_NAME;
            File dbfile = new File(myPath);
            // checkdb =
            // SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
            checkdb = dbfile.exists();
        } catch (SQLiteException e) {
            System.out.println("Database doesn't exist.....");
        }
        return checkdb;
    }

    private void copydatabase() throws IOException {
        // Open your local db as the input stream
        InputStream myinput = myContext.getAssets().open(DB_ASSETNAME);

        // Path to the just created empty db
        // String out filename = DB_PATH + DB_NAME;

        // Open the empty db as the output stream
        OutputStream myoutput = new FileOutputStream(DB_PATH + DB_NAME);

        // transfer byte to input file to output file
        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 + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(mypath, null,
                SQLiteDatabase.OPEN_READWRITE);
    }

    @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) {

    }
}