从其他线程插入数据时如何读取数据库?

时间:2017-08-31 10:48:22

标签: objective-c multithreading sqlite

我在尝试从另一个线程插入数据时读取sqlite数据库,但是我遇到了锁定数据库错误。我尝试读取内容时尝试创建数据库的新实例,但是我得到了同样的错误。如果您有任何资源或任何如何解决此问题的想法,那将是一个很大的帮助。

以下是我用来启动数据库的代码:

- (id)initWithDB:(NSString*)dbName{

    if(self = [super init])
    {
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:dbName];

            if (sqlite3_open([writableDBPath UTF8String], &_database) != SQLITE_OK) {
                    NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(_database));
                    NSLog(@"Failed to open database!");
            }
    }
    return self;
}

1 个答案:

答案 0 :(得分:0)

感谢@CL,我可以通过添加

解决此问题
sqlite3_exec(_database, "PRAGMA journal_mode=WAL;", 0, 0, 0);

在sqlite3_open()函数之后。