Pages

Monday, February 4, 2013

Used your existing SQLite database file in Android Application

Here, I am posting to how to use existing SQLite database file in android application. follow below steps.

1. Make the SQLite database file.

If you don't have a sqlite manager I recommend you to download the opensource SQLite Database Browser available for Win/Linux/Mac. Make database file.

2. Use this database in your Android application.

Now put your database file in the "assets" folder of your project and create a Database Helper class by extending the SQLiteOpenHelper class


public class Databasehelper extends SQLiteOpenHelper
{
      private SQLiteDatabase myDataBase;
      private final Context myContext;
      private static final String DATABASE_NAME = "db.sqlite";
      public final static String DATABASE_PATH = "";
      public static final int DATABASE_VERSION = 1;
      //public static final int DATABASE_VERSION_old = 1;
      //Constructor

      public Databasehelper(Context context)
      {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            this.myContext = context;
            DATABASE_PATH = myContext.getDatabasePath(DATABASE_NAME).toString();
      }

      //Create a empty database on the system
      public void createDatabase() throws IOException
      {
           boolean dbExist = checkDataBase();
            if(dbExist)
            {
                  Log.v("DB Exists", "db exists");
                  // By calling this method here onUpgrade will be called on a
                  // writeable database, but only if the version number has been
                  // bumped
                  //onUpgrade(myDataBase, DATABASE_VERSION_old, DATABASE_VERSION);
           }         
            boolean dbExist1 = checkDataBase();
            if(!dbExist1)
            {
                  this.getReadableDatabase();
                  try
                  {
                        this.close();    
                        copyDataBase();
                  }
                  catch (IOException e)
                  {
                        throw new Error("Error copying database");
                  }
            }
      }

      //Check database already exist or not
      private boolean checkDataBase()
      {
            boolean checkDB = false;
            try
            {
                  String myPath = DATABASE_PATH;
                  File dbfile = new File(myPath);
                  checkDB = dbfile.exists();
            }
            catch(SQLiteException e)
            {
            }
            return checkDB;
      }

      //Copies your database from your local assets-folder to the just created empty database in the system folder

      private void copyDataBase() throws IOException
      {
            String outFileName = DATABASE_PATH;
            OutputStream myOutput = new FileOutputStream(outFileName);
            InputStream myInput = myContext.getAssets().open(DATABASE_NAME);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = myInput.read(buffer)) > 0)
            {
                  myOutput.write(buffer, 0, length);
            }
            myInput.close();
            myOutput.flush();
            myOutput.close();
      }

      //delete database
      public void db_delete()
      {
            File file = new File(DATABASE_PATH);
            if(file.exists())
            {
                  file.delete();
                  System.out.println("delete database file.");
            }
      }

      //Open database
      public void openDatabase() throws SQLException
      {
            String myPath = DATABASE_PATH;
            myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
      }

      public synchronized void closeDataBase()throws SQLException
      {
            if(myDataBase != null)
                  myDataBase.close();
            super.close();
      }

      public void onCreate(SQLiteDatabase db)
      {
      }

      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
      {    
            if (newVersion > oldVersion)
            {
                  Log.v("Database Upgrade", "Database version higher than old.");
                  db_delete();
            }
      }
      //add your public methods for insert, get, delete and update data in database.
}
Now you can create a new instance of this DataBaseHelper class and call the createDataBase() and openDataBase() methods.


DataBaseHelper myDbHelper = new DataBaseHelper();
    myDbHelper = new DataBaseHelper(this);
    try {
          myDbHelper.createDataBase();
    } catch (IOException ioe) {
          throw new Error("Unable to create database");
    }
    try {
          myDbHelper.openDataBase();
    }catch(SQLException sqle){
          throw sqle;
    }


6 comments:

  1. will this code help me update the changes in database and reflect them into my app dynamically??

    ReplyDelete
    Replies
    1. Hello Swati Patel,
      DbHelper mDHelper = new DbHelper(context, DB_NAME, null, DB_VERSION)
      please pass version when dbhelper is created.

      You have to change the structure of your database in onUpgrade method. Not in assets folder.

      Reference link : http://stackoverflow.com/questions/6695699/how-to-upgrade-the-android-app-version-one-own-sqlite-database-without-losing-th

      Delete
  2. Thanks for sharing this great update. It's very helpful.!! recording app

    ReplyDelete
  3. Thanks for your work.

    ReplyDelete
  4. when i open my app, this code will execute each time?
    I have same database and want to use it throughout my application?

    ReplyDelete