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
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;
}
will this code help me update the changes in database and reflect them into my app dynamically??
ReplyDeleteHello Swati Patel,
DeleteDbHelper 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
Thanks for sharing this great update. It's very helpful.!! recording app
ReplyDeleteThanks for your work.
ReplyDeleteThanks :)
Deletewhen i open my app, this code will execute each time?
ReplyDeleteI have same database and want to use it throughout my application?