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