更新我的钛安卓应用程序后,我的Android设备没有获得新添加的表feild数据

时间:2016-03-06 17:43:17

标签: android titanium titanium-mobile titanium-alloy

我用我的Titanium Application创建了一个SQLite数据库。当我在我的应用程序(钛合金)中使用它时它很顺利。

接下来,当我使用SQLite管理器将新字段插入到我的表中时,在使用较新版本更新我的应用程序后,新添加的字段数据不会出现在App中。这个问题只发生在我的Android设备上,在IOS中,它运行良好。

我应该如何为Android钛做什么,这样当我更新一个应用程序时,它还将通过从数据库中获取新添加的字段来更新SQlite数据库?如果我卸载当前的应用程序并再次安装应用程序,那么它将正常工作但我不想卸载应用程序。我只是想更新一个应用程序。请评论您的建议

1 个答案:

答案 0 :(得分:1)

Android更新应用程序SQLite数据库不会覆盖。它将使用旧的SQLiteDB,如果在数据库应用程序中添加任何新字段将从旧的SQLiteDB中获取。

要解决此问题:

  • 使用SQLite数据库版本。如果DB版本是新的,则表示需要在运行时使用ALTER表。
  • 第一版: db.execute('PRAGMA user_version = 1');
  • 第二版: db.execute('PRAGMA user_version = 2');
  • 在访问表格之前检查版本: db.execute('PRAGMA user_version');

另一种方式: 复制DB和重命名DB将它放在代码中的相同位置使用新的DB名称。 Ti.Database.open(' newDBName&#39)。这不是一个好方法。

var checkDBVersion = function() {
var db = Ti.Database.open(DATABASE_NAME);
var rows = db.execute('PRAGMA user_version');
var dbVersion = 0;
if (rows.isValidRow()) {
    dbVersion = rows.fieldByName('user_version');
}
db.close();
return dbVersion;};

声明您的当前数据库版本,如var DBVersion = 2.

if(DBVersion!=checkDBVersion()){ //Write your alter query for Table }

每当您的应用程序数据库发生更改以进一步释放应用程序时,都需要更新您的DBVersion变量。