我在事件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);");
}
}
但它没有用。
感谢。
答案 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)
根本不需要。