没有调用Android SQLite onUpgrade

时间:2014-07-15 12:14:51

标签: java android sqlite oncreate

我在事件onCreate中创建了我的数据库,其中我有很多表,但是我需要再添加1个表,而且我不能丢失任何数据,所以我需要使用事件onUpgrade,所以我希望你们帮助我,因为我不知道如何使用它。

示例:

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

我需要的是

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

但它没有用。

感谢。

5 个答案:

答案 0 :(得分:2)

当您的版本数据库递增时,将调用方法onUpgrade。在您的类中验证您定义数据库版本并增加此值。

运行应用程序。您的方法onUpgrade被调用。

答案 1 :(得分:1)

这不是onUpgrade的工作方式。这是一种方法,当您发布应用程序的某些新版本并使其可用时,将调用此方法在google play中下载(可能需要对用户设备上已安装的应用程序的数据库进行一些更新)。针对您的问题的解决方案 只需在onCreate()中添加CREATE TABLE IF NOT EXISTS的查询,就像在onCreate()方法中创建另一个表一样

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

答案 2 :(得分:0)

要调用onUpgrade,必须增加您提供给SqliteOpenHelper实现构造函数的数据库版本。 使用类中的字段来存储它,并在更改数据库模式时将其递增。

答案 3 :(得分:0)

需要更改应用程序版本来更新数据库 - 不是说它不正确,而是有更有效的方法。这是通过使用你的助手的超级构造函数,它看起来像下面这样:

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

答案 4 :(得分:0)

方法是onUpgrade未被调用可能是因为sql代码中存在错误,例如在onCreate中:

functionTEXT

在TEXT之前缺少空格。

之后,

calibrar_aceleracao"+ "(limiteMaximo

在括号前缺少一个空格。

我有同样的问题,我正在缓存SQLiteException,所以我没有看到错误存在。

在方法体的开头和末尾添加一些logcat,你会看到错误的位置。

编辑:另一件事,你为什么要这样做?

if (oldVersion < 2)

根本不需要。