SQLite操作数据库全过程代码范本
发布时间:2020-12-12 19:35:24 所属栏目:百科 来源:网络整理
导读:IOS,SQLite批量插入错误 在数据库中插入数据的时候,报错: Prepare-error library routine called out of sequence 代码如下,麻烦帮我看看错误出在哪儿了。谢谢 ? NSString *databaseName = @"DB.sqlite"; NSArray *documentPaths = NSSearchPathForDirec
IOS,SQLite批量插入错误
在数据库中插入数据的时候,报错: 代码如下,麻烦帮我看看错误出在哪儿了。谢谢 ?NSString *databaseName = @"DB.sqlite";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
sqlite3 *concertsDB;
const char *dbpath = [databasePath UTF8String];
if (sqlite3_open(dbpath,&concertsDB) == SQLITE_OK)
{
sqlite3_exec(concertsDB,"BEGIN TRANSACTION",0);
const char *sqlStatement = "INSERT INTO concertsData VALUES (?,?,?)";
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(concertsDB,sqlStatement,-1,&compiledStatement,NULL) == SQLITE_OK) {
int hasError;
for (int i=0; i<[events count]; i++) {
sqlite3_bind_text(compiledStatement,1,[[[events objectAtIndex:i] title] UTF8String],SQLITE_TRANSIENT);
sqlite3_bind_int(compiledStatement,2,[[[events objectAtIndex:i] date] timeIntervalSince1970]);
sqlite3_bind_text(compiledStatement,3,[[[events objectAtIndex:i] time] UTF8String],SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement,4,[[[events objectAtIndex:i] shortDesription] UTF8String],5,[[[events objectAtIndex:i] conductor] UTF8String],6,[[[events objectAtIndex:i] location] UTF8String],7,[[[events objectAtIndex:i] durations] UTF8String],8,[[[events objectAtIndex:i] works] UTF8String],9,[[[events objectAtIndex:i] solists] UTF8String],10,[[[events objectAtIndex:i] fulltext] UTF8String],SQLITE_TRANSIENT);
sqlite3_bind_text(compiledStatement,11,[[[[events objectAtIndex:i] concertUrl] absoluteString] UTF8String],12,[[[[events objectAtIndex:i] buyUrl] absoluteString] UTF8String],13,[[[events objectAtIndex:i] imageName] UTF8String],SQLITE_TRANSIENT);
if (sqlite3_step(compiledStatement) != SQLITE_DONE) {
hasError=1;
NSLog(@"Prepare-error %s",sqlite3_errmsg(concertsDB));
}
sqlite3_clear_bindings(compiledStatement);
}
sqlite3_reset(compiledStatement);
if( hasError == 0 ) {
sqlite3_exec(concertsDB,"COMMIT",0);
}
else {
sqlite3_exec(concertsDB,"ROLLBACK",0);
}
}
sqlite3_close(concertsDB);
}
1个回答 prettoyic 2012.11.29 13:09 用调用**sqlite3_reset**代替调用**sqlite3_clear_bindings**, 然后用当前的调用**sqlite3_finalize** 代替**sqlite3_reset**。 如果再使用statement要先调用**sqlite3_step**才能调用**sqlite3_reset**。 等全部完成后,在statement中调用**sqlite3_finalize** 已经在每个循环中设置了绑定变量,就不需要再调用**sqlite3_clear_bindings**。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |