I have a mozilla sqlite for my android App.
in the sqlite manager on my firefox, i'm add a row to my table.and when i run program, the database not updated.
so i change my oncreate and upgrade method as bellow:
#Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Db_City");
}
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST Db_City");
onCreate(db);
}
and change the version of my database.
but when i run the program again all of my data in app is missing.
can anybody help me to exactly what to do?
tanks.
Dropping the table deletes all the data in the table.
You need to copy the data somewhere (probably best to rename it).
delete database (probably best to rename it).
create a new database.
re-load (and probably convert) the data.
Related
I want to add a few columns to my sqlite and maybe new tables to my app, but its already in the market and i know that if i change the something on database structure then the app needs uninstall and reinstall.
Will this happen to a live app and the user will have to uninstall first or will it update sucessfully?
Thank you
EDIT:
What i had in on upgrade is this:
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS titles");
onCreate(db);
}
but i quess it never worked. If i replace it with
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "ALTER TABLE tablename ADD COLUMN newcolumn INT";
if (oldVersion == 1 && newVersion == 2)
db.execSQL(query );
}
will it be ok?
Using a SQLiteOpenHelper this problem is resolved. Using this class you will have a db_version. Everytime you increase your db_version, you have a method called onUpgrade that will be called.
Check this out.
One thing you have to take into consideration is the db_version of your previous app version. You will need to apply all the changes between your old db_version to your last db_version.
Hope it helps
If I change something on database structure then the app needs
uninstall and reinstall?
Why would that be? The SQLiteOpenHelper class provides a good mechanism for handling changes into the structure of an app's database. Namely, onUpgrade(). You can perform whatever changes are necessary (creating new tables, dropping old ones, altering, &c in there).
From the documentation of the constructor:
version: number of the database (starting at 1); if the database is older, onUpgrade(SQLiteDatabase, int, int) will be used to upgrade the database; if the database is newer, onDowngrade(SQLiteDatabase, int, int) will be used to downgrade the database
No. If a user is updating an application (not uninstalling it - in that case it will be deleted) and a database already exists then Android will not just delete it (it could contain important information!).
Instead the onUpgrade method of your SQLiteOpenHelper will be called, and it is up to you to decide if you want to clear the data or preserve it.
You have to handle manipulation inside the onUpgrade method.
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String query = "ALTER TABLE tablename ADD COLUMN newcolumn INT";
if (oldVersion == 1 && newVersion == 2)
db.execSQL(query);
}
Android Developers have to use SQL lite for Android application, that is easy, but the problem comes when we have to upgrade the database version, we have to remove old database and create new database on upgrade, so if we want to add just one column, we have to remove all user data, is there any component or source code that manage the database upgrade, so if it only need one column, just add one column, not delete all tables.
This is completely wrong
when we have to upgrade the database version, we have to remove old database and create new database on upgrade
In your onUpgrade method, it would look something like this:
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String upgradeQuery = "ALTER TABLE yourtable ADD COLUMN yourcolumn TEXT";
if (oldVersion == 1 && newVersion == 2)
db.execSQL(upgradeQuery);
}
I implemented an Android application which use Sqlite database.
When I release a new version of my application (not in playStore), I upload it on my server, so, if the old application is running, calling web service, can understand that new version is available. So, new version is downloaded and installed.
When the application is overinstalled, the database is not dropped, so if I need to do any changes of my database I need to use the method:
public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion)
This is fine, unless I need to do many changes in my database. In this case, the code becomes unreadable. So I would to delete the database and create a new one.
How can I perform this task?
EDIT: What about using context.deleteDatabase(DATABASE_NAME); ?
For throw-away databases (where the data is e.g. a cached copy of data available in the cloud) I usually make onUpgrade() just call onCreate() and make onCreate() execute DROP TABLE IF EXISTS <tablename> before creating the tables.
For example:
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onCreate(db);
}
#Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS foo");
db.execSQL("CREATE TABLE foo(bar INTEGER, baz TEXT");
}
you can think about this one
keep a trace of your upgrade using a flag in shared preference. when you are downloading new version then set the flag to true. on every launch check the flag. if the flag is true then recreate the database and set the flag false.
I havn't tried similar things but I think it should work in your case.
and to delete database context.deleteDatabase(DATABASE_NAME);
If you just want to re-create your whole database, just drop every table in the old one.
I'm using a database in my application which is currently on the Google Play. Now I'm releasing an update and have added a new column to an existing table. Looks like I need to use onUpgrade() method of SQLiteOpenHelper class. I'm just wondering if I need to recreate the whole table, which leads to backup/restore (which is complex) process, or I can just alter it on upgrade? How shall I handle upgrade in the code? Is it just enough to implement onUpgrade() method? Might be any good example? Really appreciate your input, thank you very much.
Yes, you can alter table . No need to create it again .
private static final String ALTER_USER_TABLE_ADD_USER_SOCIETY = "ALTER TABLE user_table ADD user_society TEXT";
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
if(newVersion > oldVersion)
{
db.execSQL(ALTER_USER_TABLE_ADD_USER_SOCIETY);
}
}
i was published android apps using sqlite in local db.now i am add one more table in that db.how to upgrade existing db to user.i.e user data can't delete.only my update will effect when user update previous apps version.how to handle this issue?how to republish my application?
Thanks in advance...
You have to override onUpgrade method of SQLiteOpenHelper
#Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
db.execSQL(CREATE_NEW_TABLE);//create your new table
//execute other sql statements if required
}
Did in one of my project here is Link. Hope this help