Pages

Subscribe:

Labels

Tuesday 4 October 2011

Create Database using exiting database


In this tutorial, I am going to create the database by using the existing database. In order to do this , place your existing database into the “assets”  folder. The DBAdapter.java file is as follows.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class DBAdapter extends SQLiteOpenHelper {
                private static String DB_PATH = "";
                private static final String DB_NAME = "game.db";
                private SQLiteDatabase myDataBase;
                private final Context myContext;

                private static DBAdapter mDBConnection;
                private DBAdapter(Context context) {
                                super(context, DB_NAME, null, 1);
                                this.myContext = context;
                                DB_PATH = "/data/data/"+ context.getApplicationContext().getPackageName()            + "/databases/";
                }
                public static synchronized DBAdapter getDBAdapterInstance(Context context) {
                                if (mDBConnection == null) {
                                                mDBConnection = new DBAdapter(context);
                                }
                                return mDBConnection;
                }

                public void createDataBase() throws IOException {
                                boolean dbExist = checkDataBase();
                                if (dbExist) {
                                                // do nothing - database already exist
                                } else {
                                                // By calling following method
                                                // 1) an empty database will be created into the default system path of your application
                                                // 2) than we overwrite that database with our database.
                                                this.getReadableDatabase();
                                                try {
                                                                copyDataBase();
                                                } catch (IOException e) {
                                                                throw new Error("Error copying database");
                                                }
                                }
                }

                private boolean checkDataBase() {
                                SQLiteDatabase checkDB = null;
                                try {
                                                String myPath = DB_PATH + DB_NAME;
                                                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;
                }

                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 + 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();
                }

                public void openDataBase() throws SQLException {
                                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) {
                }

                // ----------------------- DATABASE Operations ------------------------------
               
                 public long insertPuzzle(String problem,String solution,String level, int status)
                 {
                                 ContentValues initialValues = new ContentValues();
                                 initialValues.put("problem", problem);
                                 initialValues.put("solution",solution);
                                 initialValues.put("level",level);
                                 initialValues.put("status",status);
                                 return myDataBase.insert("puzzles", null, initialValues);
                 }
}


In the Activity class call like this


private DBAdapter db=null;
db=DBAdapter.getDBAdapterInstance(this);
/*try {
db.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}*/
db.openDataBase();
db.insertPuzzle(..,..,..);

No comments:

Post a Comment