我发现在更新应用版本后,我上传的应用程序中没有找到“table_name”这样的表。我在测试后出来我只是在将旧版本的应用程序升级到新版本的应用程序之后才遇到此问题
我所实施的内容
我已经在onUpgrade()方法中完成了代码,并且还在构造函数中升级了db版本,但我无法在设备中对其进行测试。
步骤1) 将版本代码1增加到2
public databasehelper(Context context) {
super(context, DATABASE_NAME, null, 2);
this.myContext = context;
try {
createDataBase();
openDataBase();
} catch (IOException e) {
e.printStackTrace();
}
}
第2步) 添加了新表 onUpgrade() 方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("onUpgrade db", ">>>>called");
switch (oldVersion) {
case 1:
db.execSQL(DATABASE_CREATE_notification_counter);
Log.e("db version", ">>>"+oldVersion);
// we want both updates, so no break statement here...
case 2:
Log.e("db version", ">>>"+oldVersion);
// I removed onCreate() method from here because new version will already have the new table
// onCreate(db);
}
}
第3步) onCreate()方法用于新版本的数据库。
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_notification_counter);
Log.d("oncreate db", ">>>>called");
}
我有解决方案来升级数据库 链接1 LINK2 LINK3 LINK4
为什么我无法测试它
我们已经在Play商店上传了付费应用程序,所以我必须在模拟器或设备中测试数据库升级方法,使用两个不同的apk意味着旧版本和更新版本。
我已经在设备中第一次使用旧版本和新版本进行了测试(db更改了db中添加的新表)但是此时不会调用onUpgrade()方法。
题:
1)如何在更新新版本之前测试数据库升级
应用商店?
2)只有在从Play商店更新版本时才会调用
只要?
请帮我解决这个问题。
答案将不胜感激。提前致谢。
存储在db中的db版本。只需创建一个旧版本的db(db_old),而不是DbHelper。使用DbHelper连接到db_old,将调用onUpgrade方法。
您可以将现有数据库用作db_old,只需减少它的版本即可。要更改版本,您可以使用任何sqlite db编辑器。
如果不想为DbHelper编写测试并想要模拟应用程序升级,则可以使用 adb install -r
命令。 在这里阅读更多。
经过长时间搜索和测试我的应用程序,最后...
我搞定了!在createDataBase-class中缺少一行:
我刚刚在我的代码createDataBase()中添加了以下行
this.getWritableDatabase();
我们必须在创建数据库时授予编写数据库的权限,当我们从Play商店升级应用程序时,此权限将被授予编写数据库的权限。
成功打开后,数据库将被缓存,因此您可以调用
每次需要写入数据库时都会使用此方法。 (确保
在不再需要数据库时调用close()。)错误如
错误的权限或完整的磁盘可能会导致此方法失败,但是
如果问题得到解决,未来的尝试可能会成功。
数据库升级可能需要很长时间,您不应该调用此方法
从应用程序主线程,包括从
ContentProvider.onCreate()。
public void createDataBase() throws IOException
{ boolean dbExist = checkDataBase();
if (!dbExist) {
this.getReadableDatabase();
try {
// ---If not created then copy the database---
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
else {
/* This line: that has been solve my problem */
this.getWritableDatabase();
}
}
public void openDataBase()抛出SQLException {
// --- Open the database--- String myPath = path + DATABASE_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE); // you also have to add open_readwrite condition here
/*onUpgrade(myDataBase, 1, 2);*/ // no need to call upgrade here it will be called automatically
}
打开数据库时必须提供读写条件。
此外,在创建类DataBaseHelper的新对象时调用onUpgrade(),但仅在数据库版本号不匹配时调用。所以这意味着没有必要“自己”调用onUpgrade。如果发布数据库的更新,只需将版本nr递增1并在onUpgrade()方法中应用更改。
我是从给定的链接得到的:
onUpgrade数据库 - oldVersion - newVersion
希望这将有助于未来的开发人员!
如何测试升级sqlite数据库而无需从android中的Play商店下载新版本应用程序
1)如何在Play商店更新新版本之前测试数据库升级?
我从这里下载了eclipse的sqlite浏览器插件
http://sourceforge.net/projects/sqlitebrowser/
并查看本教程如何使用sqlite插件
http://www.coderzheaven.com/2011/04/18/sqlitemanager-plugin-for-eclipse/
只需从第一个链接复制jar并粘贴到名为plugin的eclipse安装文件夹中,然后重新启动eclipse
然后启动一个模拟器并从DDMS导航到您的包,您可以查看您的sqlite数据库并检查您对表所做的更改是否存在
您可以从Playstore以外的其他来源安装apk(如果在手机上启用了)。
通过电子邮件将其发送到手机或通过USB线复制apk的最简单方法。