如何使用Titanium将db文件保存在文档目录中

时间:2012-10-10 16:24:58

标签: ios sqlite titanium titanium-mobile

我想使用Titanium API在文档目录而不是 / Library / Private Documents 文件夹中保存数据库文件。

var database = Titanium.Database.install('/db/Database.sqlite',DatabaseHandler.DB_NAME);

它被保存到

iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Library/Private Documents/Database.sql

而我们在

中要求它
iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Documents/dbDir/Database.sql

iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Documents/Database.sql

基本要求是,我们不希望用户的数据在新的应用更新中丢失。在App Store中的新应用程序更新中,仅保存文档目录数据,并删除所有数据。

如果我手动移动db文件:

if(Ti.Platform.osname === 'iphone'){
  var dbFile = database.file;
  var filePath = String.format('%s/%s.sql',dbDir.resolve(),DatabaseHandler.DB_NAME);
  Ti.API.info(filePath);
  var result = dbFile.move(filePath);
  Ti.API.info(result);   
}

然后在运行应用程序时,我遇到了消息问题:

  

message =“无效的SQL语句.Error Domain = com.plausiblelabs.pldatabase Code = 3 \”解析提供的SQL语句时出错。\“UserInfo = 0x9c14ed0 {com.plausiblelabs.pldatabase.error.vendor.code = 1,NSLocalizedDescription =解析提供的SQL语句时发生错误。,com.plausiblelabs.pldatabase.error.query.string = SELECT * FROM UserProfile,com.plausiblelabs.pldatabase.error.vendor.string = no such table:UserProfile} in - [TiDatabaseProxy执行:](TiDatabaseProxy.m:186)“

1 个答案:

答案 0 :(得分:2)

您是如何打开数据库的?

如果您将Ti.Database.open('MyDatabase')移动到另一个位置,那么它将在默认位置创建一个名为“MyDatabase”的空白数据库。您原始安装数据库的位置。据我所知,这是Ti.Database.open的默认功能。如果数据库不存在,则创建它。由于此数据库是新的并且没有表格,因此表示UserProfile表不存在。

我不知道您是否有办法在Ti.Database.open调用中限定数据库的位置。例如,我不知道是否

Ti.Database.open('/iPhone Simulator/5.0/Applications/B750AD49-5879-4ABD-B903-C76A03833BE4/Documents/dbDir/MyDatabase')

是否有效。您需要告知打开调用数据库所在的位置,因为您已将其从预期找到它的位置移动。也许情况并非如此,但您的示例代码并未显示您对数据库的使用情况,而是显示了您如何管理文件的移动。