无法写入sqlite数据库
can't write to sqlite database
我的程序需要操作数据库,现在我在我的xcode项目中使用了'FMDB'框架并关闭了沙箱。
但是我遇到了一个麻烦,很奇怪:在我自己的电脑上,read/write操作是没问题的。 (存档为app后),但在另一台电脑上,只能读,不能写,为什么?
(数据库在此应用程序的源文件夹中)。
问题不是找不到数据库文件,因为我在其他电脑上记录了数据库路径,是对的。
我的系统是"Mac OS 10.15",我在Xcode.
中使用'10.13'版本的SDK
读操作:↓
+ (charData *)getCharacteData:(NSString *)character
{
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"CN_Characters" ofType:@"DB"];
FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
[db open];
FMResultSet *res = [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM Proverbs WHERE character = '%@';",character]];
charData *charDta = [charData new];
if ([res next]) {
charDta.character = [NSString stringWithString:[res stringForColumn:@"character"]];
charDta.explanation = [NSString stringWithFormat:@"%@",[res stringForColumn:@"explanation"]];
} else {
return NULL;
}
[db close];
return charDta;
}
写操作:↓
+ (BOOL)saveCharacterDataWithCharacter:(NSString *)character Explanation:(NSString *)explanation
{
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"CN_Characters" ofType:@"DB"];
printf("databasePath: %s\n",databasePath.UTF8String);
FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
[db open];
BOOL res = [db executeUpdate:[NSString stringWithFormat:@"UPDATE Proverbs SET explanation = '%@' WHERE character = '%@'",explanation,character]];
[db close];
return res;
}
是否是权限问题?
当你运行你的应用程序时,你需要将你的文件从包中复制到文档目录中。
if([[NSFileManager defaultManager] copyItemAtPath: databasePath
toPath:[documentsDirectory stringByAppendingPathComponent:@"CN_Characters.DB"]
error:&error]){
否则为只读
我的程序需要操作数据库,现在我在我的xcode项目中使用了'FMDB'框架并关闭了沙箱。
但是我遇到了一个麻烦,很奇怪:在我自己的电脑上,read/write操作是没问题的。 (存档为app后),但在另一台电脑上,只能读,不能写,为什么? (数据库在此应用程序的源文件夹中)。
问题不是找不到数据库文件,因为我在其他电脑上记录了数据库路径,是对的。
我的系统是"Mac OS 10.15",我在Xcode.
中使用'10.13'版本的SDK读操作:↓
+ (charData *)getCharacteData:(NSString *)character
{
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"CN_Characters" ofType:@"DB"];
FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
[db open];
FMResultSet *res = [db executeQuery:[NSString stringWithFormat:@"SELECT * FROM Proverbs WHERE character = '%@';",character]];
charData *charDta = [charData new];
if ([res next]) {
charDta.character = [NSString stringWithString:[res stringForColumn:@"character"]];
charDta.explanation = [NSString stringWithFormat:@"%@",[res stringForColumn:@"explanation"]];
} else {
return NULL;
}
[db close];
return charDta;
}
写操作:↓
+ (BOOL)saveCharacterDataWithCharacter:(NSString *)character Explanation:(NSString *)explanation
{
NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"CN_Characters" ofType:@"DB"];
printf("databasePath: %s\n",databasePath.UTF8String);
FMDatabase *db = [FMDatabase databaseWithPath:databasePath];
[db open];
BOOL res = [db executeUpdate:[NSString stringWithFormat:@"UPDATE Proverbs SET explanation = '%@' WHERE character = '%@'",explanation,character]];
[db close];
return res;
}
是否是权限问题?
当你运行你的应用程序时,你需要将你的文件从包中复制到文档目录中。
if([[NSFileManager defaultManager] copyItemAtPath: databasePath
toPath:[documentsDirectory stringByAppendingPathComponent:@"CN_Characters.DB"]
error:&error]){
否则为只读