【问题标题】:Database is locked error in sqlitesqlite中的数据库被锁定错误
【发布时间】:2012-10-31 04:07:07
【问题描述】:

我正在使用 sqlite 数据库来存储我的数据。但是在插入查询时它显示“数据库已锁定”的错误。这是我的代码

 sqlite3_stmt    *statement;
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        const char *dbpath = [[defaults objectForKey:@"dbpath"] UTF8String];

        if (sqlite3_open(dbpath, &studentDB22) == SQLITE_OK)
        {
            NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO Emotion_videos (name) VALUES (\"%@\")",filePath];
            const char *query_stmt = [insertSQL UTF8String];
                if (sqlite3_prepare_v2(studentDB22, query_stmt, -1, &statement, NULL) == SQLITE_OK)
                {
                    NSLog(@"shi h2345");
                    if (sqlite3_step(statement) == SQLITE_ROW)
                    {
                        printf( "could not prepare statement: %s\n", sqlite3_errmsg(studentDB22));

                    }

                }
            sqlite3_finalize(statement);
        }
        else
        {
                   printf( "could not prepare statement: %s\n", sqlite3_errmsg(studentDB22));
        }

我可以插入数据两三次,但再次运行时,它显示数据库锁定错误。

【问题讨论】:

    标签: iphone objective-c xcode cocoa-touch sqlite


    【解决方案1】:

    您打开数据库,但没有关闭它。

    您不应该使用字符串格式来创建查询。你应该把?然后查询中的占位符绑定正确的值。这会处理诸如正确引用和转义字符串值之类的事情。

    NSString *insertSQL = @"INSERT INTO Emotion_videos (name) VALUES (?)";
    

    准备好语句后,调用sqlite3_bind_text绑定字符串值。

    还有。不要使用sqlite3_open,使用sqlite3_open_v2。它更好,让您拥有更多控制权。

    【讨论】:

    • sqlite3_open_v2 中的参数是什么??
    • 我的查询只运行了两次。第三次查询没有执行,两个应用程序都没有崩溃。请帮忙。
    • 每次打开数据库都要关闭吗?您是否在调试器中运行代码?第三次有什么不同?
    【解决方案2】:

    您在创建数据库连接时错过了重要步骤之一:-

    如果已经建立连接,请在创建连接之前关闭数据库连接。

       if (sqlite3_open([[self dataFilePath] UTF8String], &database)
        != SQLITE_OK) { sqlite3_close(database); NSAssert(0, @"Failed to open database");
        }
    

    在函数末尾使用:-

    sqlite3_close(database);
    

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 2018-06-11
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      相关资源
      最近更新 更多