简体   繁体   中英

Android SQLite onUpgrade not called

I have my database created in event onCreate , in which I have a lot of tables, but I need add 1 more table, and I can't lose any data, So I need to use the event onUpgrade , So I hope you guys help me because I don't know how to use it.

Example :

public void onCreate(SQLiteDatabase db) {
    sql = "CREATE TABLE IF NOT EXISTS funcionarios"
            +"(codigo INTEGER PRIMARY KEY, funcionario TEXT, apelido TEXT , functionTEXT, cartao TEXT , foto TEXT , tipo_foto TEXT);";  
    db.execSQL(sql);
}

what i need is

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if(oldVersion < 2){
        db.execSQL("CREATE TABLE IF NOT EXISTS calibrar_aceleracao"+
                 "(limiteMaximo INTEGER, limiteMinimo INTEGER);");
    }
}

but it doesn't work.

thanks.

The method onUpgrade is called when your version database is incremented. Verify in your class where you define your database version and increment this value.

Run application. Your method onUpgrade is called.

This is not the way onUpgrade works .This is a method which will be called when you release some new version of your application and make it available for download in google play(and which may be requiring some updations to the database of the application already installed on users' devices').For your problem's solution Just add the query of CREATE TABLE IF NOT EXISTS in your onCreate() as you did for the creation of the other table in your onCreate() method already

public void onCreate(SQLiteDatabase db) {
    sql = "CREATE TABLE IF NOT EXISTS funcionarios"
            +"(codigo INTEGER PRIMARY KEY, funcionario TEXT, apelido TEXT , functionTEXT, cartao TEXT , foto TEXT , tipo_foto TEXT);"; 
 ///HERE YOUR Create Table QUERY and call db.execSQL

    db.execSQL(sql);
}

For onUpgrade to get called you must increase the database version that you supply to the SqliteOpenHelper implementation constructor. Use a field in your class to store the same and increment it when you change your database schema.

You do not need to change you applications version to update your database - not saying it is incorrect but there is a more efficient way of doing it. And that is through the use of the super's constructor of your helper it would look something like the following:

public class MyDatabaseHelper extends SQLiteOpenHelper {

    public MyDatabaseHelper(Context context) {
        super(context, "My.db", null, 1 /* This is the version of the database*/);
    }

    @Override
    public void onCreate(SQLiteDatabase database) {
        sql = "CREATE TABLE IF NOT EXISTS funcionarios (codigo INTEGER PRIMARY KEY, funcionario TEXT, apelido TEXT , functionTEXT, cartao TEXT , foto TEXT , tipo_foto TEXT);";  
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        if(oldVersion < 2){
             db.execSQL("CREATE TABLE IF NOT EXISTS calibrar_aceleracao (limiteMaximo INTEGER, limiteMinimo INTEGER);");
        }
    }
}

The method is onUpgrade is not being called probably because there are errors in the sql code, for example in the onCreate:

functionTEXT

is missing a space before TEXT.

Also after,

calibrar_aceleracao"+ "(limiteMaximo

is missing a space before the bracket.

I had the same problem, I was caching the SQLiteException so I didn't see the error was there.

Put some logcat at the beginning and at the end of the method body and you'll see where the error is.

EDIT: another thing, why did you put that if?

if (oldVersion < 2)

It's not necessary at all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM