在Titanium SDK中安装远程SQLite文件

时间:2018-06-18 21:15:13

标签: javascript titanium appcelerator titanium-mobile appcelerator-titanium

所以我尝试下载用PHP创建的SQLite文件。它包含四个包含一些数据的表。大约10MB。我希望它首先删除旧的数据库文件(prepareContentDB();) - 这是有效的。然后,当它被删除时,我想下载新文件,将其保存到tmp安装它,然后验证它是否包含该表。但是,这只适用于首次运行,作为全新安装。但是在第二次运行中(为了操纵数据库的更新")数据库仍然被删除,新的数据库被下载并安装,但是当我试图从安装的表中获取表时数据库返回null is not an object。在安装完成之前,是否有一些我不知道的东西?

var prepareContentDB = function(){
   $.status.text = "REMOVING OLD DB";
   var oldDB = Ti.Database.open("content");
   if(oldDB.file.exists()){
      if(oldDB.file.deleteFile()){
         oldDB = null;
         downloadContentDB();
      }
   }else{
      downloadContentDB();
   }
};
var downloadContentDB = function(){
   $.status.text = L("DOWNLOADING CONTENT");
   var xhr = Ti.Network.createHTTPClient({
      onload: function(d){
         $.status.text = "Writing new file";
         var f = Ti.Filesystem.getFile(Ti.Filesystem.tempDirectory,"databaseupdate");
         if(f.write(this.responseData)){
            $.status.text = "Install new db";
            try {
                if(db = Ti.Database.install(f.nativePath, "content")){
                    if(OS_IOS){
                        db.file.setRemoteBackup(false);
                    }
                    var result = db.execute("SELECT name FROM sqlite_master WHERE type='table';");
                    var str = "";
                    while(result.isValidRow()){
                        str += ("Table: "+ result.fieldByName("name")+"\n");
                        result.next();
                    }
                    result.close();
                    db.close();
                    alert(str); //To see that all tables are installed.
                }
            }
            catch(err) {
                alert(err.message); //Throws the error described in the description
            }
        }

    },
    timeout: 100000,
    ondatastream: function(e){
        $.status.text = L("DOWNLOADING CONTENT")+Math.round(e.progress * 100)+"%";
    }
   });
   xhr.open("GET", "http://***.com/***"); //direct link to the database-file on server
   xhr.send();
}

0 个答案:

没有答案