所以我尝试下载用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();
}