Sqlite DB已锁定

时间:2015-10-26 07:59:47

标签: objective-c iphone sqlite

-(void)insertQuery:(NSString *)query{
    sqlite3_stmt *selectstmt;
    // Create a sqlite object.
    sqlite3 *database;
    // Set the database file path.
    NSString *databasePath = [self.documentsDirectory stringByAppendingPathComponent:self.databaseFilename];

    if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        //*************** insert value in database******************************\\

        const char *sql = [query UTF8String];
        sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL);
        if(sqlite3_step(selectstmt)==SQLITE_DONE)
        {
            NSLog(@"insert successfully");
        }
        else
        {
            NSLog(@"insert not successfully");
            NSLog(@"DB Error: %s", sqlite3_errmsg(database));
        }
        sqlite3_finalize(selectstmt);
    }
    sqlite3_close(database);
}

使用上面的代码尝试触发插入查询,但有时它可以正常工作,大部分时间我都会遇到数据库锁定错误。

提前帮助提前谢谢。

3 个答案:

答案 0 :(得分:4)

使用此链接并使用FMDB管理您的数据库。 5个月后我也遇到了这个问题并使用了这个问题,我的问题解决了100%。

答案 1 :(得分:0)

您没有正确关闭连接。

Options

答案 2 :(得分:0)

数据库锁通常发生在向数据库写入内容或者打开其他连接时。检查其他丢失连接的代码。

尝试检查sqlite3_prepare_v2的SQLITE_OK,因为数据库可能正忙,可能会返回SQLITE_BUSY以获取步骤语句。进一步解释here。请尝试以下代码:

if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    //*************** insert value in database******************************\\

    const char *sql = [query UTF8String];
    if(sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL)==SQLITE_OK)
    {
      if(sqlite3_step(selectstmt)==SQLITE_DONE)
      {
          NSLog(@"insert successfully");
      }
      else
      {
          NSLog(@"insert not successfully");
          NSLog(@"DB Error: %s", sqlite3_errmsg(database));
      }
      sqlite3_finalize(selectstmt);
    }
    sqlite3_close(database);
}