在for循环中插入时SQLITE_BUSY

时间:2014-07-25 16:48:08

标签: ios objective-c sqlite

我有以下代码,应该将数据插入我的.sqlite文件中的表中。 capturedImages是一个图像数组,由于它的大小,我无法使用NSKeyedArchiver等传递整个数组,因为我看到很多人在此网站上使用。 malbdateStringuser是包含需要传递的其他信息的对象。

因此,我只是尝试使用for循环传递每个图像和相应的数据。有问题的代码段:

NSString *momentInsertSQL = [NSString stringWithFormat:@"INSERT INTO MomentTbl (momentID, albumID, title, timestamp, author, latitude, longitude, canvas, burst) VALUES (NULL, %d, '%@', '%@', '%@', '%@', '%@', ?, '%d')", alb.ID, alb.title, dateString, user, m.latitude, m.longitude, burstID];
const char *query_stmt = [momentInsertSQL UTF8String];

NSData *imageData = nil;

for(int i = 0; i < [capturedImages count]; ++i){
    imageData = UIImageJPEGRepresentation([m.moment objectAtIndex:i], 1.0);
    if (SQLITE_OK == sqlite3_open(dbPath, &db)) {

        if(SQLITE_OK == sqlite3_prepare_v2(db, query_stmt, -1, &sqlStatement, NULL)) {

            sqlite3_bind_blob(sqlStatement, 1, [imageData bytes], [imageData length], NULL);

            //perform sql call
            int res2 = sqlite3_step(sqlStatement);
            if(res2 == SQLITE_OK){
                NSLog(@"Sucessful insert");
            }
            else {
                NSLog(@"Insert-error #%d: %s", res2, sqlite3_errmsg(db));
            }
        }

        else {
            NSLog(@"Problem with prepare statement");
        }
        sqlite3_close(db);
    }

    else {
        NSLog(@"Could not open database");
    }

}

我已经验证open,prepare_v2和bind_blob语句可以正常工作。当我尝试使用sqlite3_step(sqlStatement)插入时,我收到以下消息:

Insert-error #5: database is locked

谷歌搜索告诉我,当该文件被另一个进程锁定时,会发生此代码SQLITE_BUSY。但是,我不确定将锁定它或如何防止这种情况发生。有人可以对这种情况有所了解吗?

0 个答案:

没有答案