将数据插入或更新到表中时出现“sqlite3_exec只读数据库”错误

时间:2009-09-08 08:01:12

标签: iphone cocoa-touch sqlite

在将数据插入或更新到表中时,我收到“sqlite3_exce只读数据库”错误。

因为最初我必须在数据库和数据库中创建多个表。将大量数据插入其中,因此我创建了一个虚拟应用程序,它创建了“database.sql”数据库,创建了Table&它将数据插入表中。

现在我将“database.sql”文件放入我的主应用程序&的资源文件夹中。从数据库访问数据时提供主束路径。

我可以从中访问数据,但是当从表中插入或更新数据时,我会提到错误。

请帮助我解决上述问题。

谢谢。

2 个答案:

答案 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;

}