在将数据插入或更新到表中时,我收到“sqlite3_exce只读数据库”错误。
因为最初我必须在数据库和数据库中创建多个表。将大量数据插入其中,因此我创建了一个虚拟应用程序,它创建了“database.sql”数据库,创建了Table&它将数据插入表中。
现在我将“database.sql”文件放入我的主应用程序&的资源文件夹中。从数据库访问数据时提供主束路径。
我可以从中访问数据,但是当从表中插入或更新数据时,我会提到错误。
请帮助我解决上述问题。
谢谢。
答案 0 :(得分:4)
是的,maib包中的文件是只读的。
您只能在Documents文件夹中书写。
将您的数据库文件复制到文档中并使用它
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // path to Documents folder
答案 1 :(得分:0)
static sqlite3 * getDbHandle(){
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // path to Documents folder
NSString * databaseFileName = [documentsDirectory stringByAppendingString:@"/feeds.db"];
// check if db file is in documents folder
// If it is already there, thats great.
// Else, we need to copy it there.
BOOL dbExists = [fileManager fileExistsAtPath:databaseFileName];
if ( !dbExists ) {
NSLog(@"No database in document folder.Need to move it there");
// we need to copy the file here...
NSString * databaseFileinAppDir = [ [NSBundle mainBundle] pathForResource:@"feeds" ofType:@"db"];
NSError *error;
NSLog(@"Target Db %@",databaseFileName);
[fileManager copyItemAtPath:databaseFileinAppDir toPath:databaseFileName error:&error];
if ( error ){
NSLog(@"ERROR IN FILE MOVE:{%@}",[error description]);
return NULL;
}
}
sqlite3 *database = NULL;
if ( sqlite3_open([databaseFileName UTF8String], &database ) != SQLITE_OK ) {
printf("ERROR: Unable to open database %@",databaseFileName);
return NULL;
}
return database;
}