我有以下代码,应该将数据插入我的.sqlite文件中的表中。 capturedImages
是一个图像数组,由于它的大小,我无法使用NSKeyedArchiver等传递整个数组,因为我看到很多人在此网站上使用。 m
,alb
,dateString
和user
是包含需要传递的其他信息的对象。
因此,我只是尝试使用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。但是,我不确定将锁定它或如何防止这种情况发生。有人可以对这种情况有所了解吗?