使用iPhone更新数据库的问题

时间:2011-10-04 13:27:31

标签: iphone sqlite

我会尽力描述我的问题。我使用mac上的控制台创建了一个sqlite数据库。我已经将文件添加到我的项目中,右键单击并点击“将文件添加到(projectname)”,然后添加数据库。我能够读取数据库,但是当我尝试更新数据库时,虽然我的调试已经确认语句(更新语句)成功,但数据库中的数据没有更新。我收集这是因为指向数据库文件的指针指向我的文档中的.sql文件(这是我添加的原始文件所在的位置),但是我想通过将该文件添加到项目中,该文件将放在项目文件夹中。

我的问题是如何将.sql文件添加到我的项目中,而不是从桌面引用它,并且能够更新数据库中的信息。

2 个答案:

答案 0 :(得分:0)

该文件不是桌面上的文件,该文件捆绑在.app软件包中。

数据库位于应用程序包中,只读,您需要在首次启动时将数据库移动到文档目录。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

中添加这样的内容
NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES) objectAtIndex:0]; 
NSString *sqlFile =[documentDirectory stringByAppendingPathComponent:@"yourdb.sql"];

if (![[NSFileManager defaultManager] fileExistsAtPath:sqlFile]) {
   NSString *bundleSql = [[NSBundle mainBundle] pathForResource:@"yourdb" ofType:@"sql"];

   NSError *error = nil;
   [[NSFileManager defaultManager] copyItemAtPath:bundleSql toPath:sqlFile error:&error];

   if (error) {
      NSLog(@"Could not copy json file: %@", error);
   }
}

答案 1 :(得分:0)

通过以下方式获取捆绑包中的SQL文件目录路径:

NSString *sqlFilePath = [[NSBundle mainBundle] pathForResource:@"YourSQLFileName" ofType:@"sql"];

接下来使用以下命令将sql文件复制到沙箱目录:

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *sandboxDirectoryPath = [documentPaths objectAtIndex:0];
NSString *newSQLFilePath = [NSString stringWithFormat:@"%@/YourSQLFileName.sql", sandboxDirectoryPath];

[[NSFileManager defaultManager] copyItemAtPath:sqlFilePath toPath:newSQLFilePath error:error]