Reputation: 531
i am creating an app that needs a database. i created it using sqlite database browser, which means the app i created, imports the database i created into the phone.
and what i've learnt before, is if i did any changes to the database using the browser, i have to uninstall the app from my phone/emulator so that it make the changes.
so the problem came. what happen if after i upload the app to the market, and realized that i need to update the table ??? and also, another problem is that user have to enter some data and save it into a table of the database.
so is there a way to update my database & yet keep the data that the user entered in the table ???
my database helper code is below. pls help...thanks alot !
public class DatabaseHelper extends SQLiteOpenHelper {
//The Android's default system path of your application database.
private static String DB_PATH = "/data/data/test.test/databases/";
private static String DB_NAME = "TestDatabase";
private static final int DB_VERSION = 1;
private SQLiteDatabase myDatabase;
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 DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.myContext = context;
}//constructor
/**
* # Create Database #
* 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
}//if
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");
}//catch
}//else
}//createDatabase
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.
}//catch
if(checkDB != null)
{
checkDB.close();
}//if
return checkDB != null ? true : false;
}//checkDatabase
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();
}//copyDatabase
// # open database #
public void openDatabase() throws SQLException {
//Open the database
String myPath = DB_PATH + DB_NAME;
myDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}//openDatabase
@Override
public synchronized void close()
{
if(myDatabase != null)
myDatabase.close();
super.close();
}//close
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public List<String> selectData
(String tableName, String [] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy) {
List<String> list = new ArrayList<String>();
Cursor cursor = this.myDatabase.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy);
if (cursor.moveToFirst())
{
do
{
list.add(cursor.getString(0));
}
while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed())
{
cursor.close();
}
return list;
}//selectData
public void insertData (String tableName, String nullColumnHack, ContentValues values) {
try
{
myDatabase.insert(tableName, nullColumnHack, values);
} catch (Exception e) {
Log.e("Error :","unable to insert data");
}//catch
}//insertData
//edit row
public void updateData (String tableName, ContentValues values, String whereClause, String[] whereArgs) {
try
{
myDatabase.update(tableName, values, whereClause, whereArgs);
} catch (Exception e) {
Log.e("Error :","unable to update data");
}//catch
}//updateData
public void deleteRow (String tableName, String whereClause, String[] whereArgs) {
try
{
myDatabase.delete(tableName, whereClause, whereArgs);
} catch (Exception e) {
Log.e("Error :","unable to delete row");
}//catch
}//deleteRow
}
Upvotes: 0
Views: 334
Reputation: 7879
That's what:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
is for.
Upvotes: 2