user3009319
user3009319

Reputation: 77

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.

Upvotes: 3

Views: 6239

Answers (5)

Loures
Loures

Reputation: 433

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.

Upvotes: 2

Lorenzo Barbagli
Lorenzo Barbagli

Reputation: 1281

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.

Upvotes: 0

Dark Eye
Dark Eye

Reputation: 67

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);");
        }
    }
}

Upvotes: 2

nobalG
nobalG

Reputation: 4620

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);
}

Upvotes: 0

upenpat
upenpat

Reputation: 685

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.

Upvotes: 1

Related Questions