0

我想使用 Titanium API将数据库文件保存在Documents Directory中,而不是/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)"

4

1 回答 1

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')

将工作与否。您需要告诉 open call 数据库所在的位置,因为您将它从它期望找到它的位置移走了。也许情况并非如此,但您的示例代码并未显示您对数据库的使用,而是显示了您如何管理文件的移动。

于 2012-10-10T20:27:24.697 回答