前端之家收集整理的这篇文章主要介绍了
sqlite transaction事务操作,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Start a transaction with:sqlite3_exec(db,"BEGIN",0);
Commit a transaction with:
一下的代码是用transaction的,首先尝试了把两个sql语句链接在一起的,用一个sqlite3_prepare——似乎没成功,分开来写,也没成功,难道是有什么特别的?
//sqlite3_exec(database,0);
NSLog(@"querysql :%@",sql1);
NSLog(@"querysql :%@",sql2);
if(sqlite3_prepare_v2(database,[sql1 UTF8String],-1,&compiledStatement,NULL) == sqlITE_OK && sqlite3_prepare_v2(database,[sql2 UTF8String],NULL) == sqlITE_OK)
{
//sqlite3_exec(database,0);
retValue=YES;
}
else {
//sqlite3_exec(database,"ROLLBACK",0);
}
sqlite3_finalize(compiledStatement);
sqlite3_close(database);
后来我还是想了好多方法,至少sql语句看起来是可以的,在sql analzer里面是ok的,
if (sqlite3_exec (database,[updatesqlUTF8String],NULL,&errorMsg) != sqlITE_OK)
{
NSLog(@"upate error");
sqlite3_close(database);
return NO;
}
老实说没看懂,大概是不建议用这个begin:::
后来我又看到这么段代码,觉得挺靠谱的:
//执行事务
@try {
sqlite3_exec(database,"BEGIN TRANSACTION",0); //事务开始
NSString *s = [[NSString alloc] initWithUTF8String:[要执行的
sql 语句 UTF8String]];
char *
sql = (char *) [s UTF8String];
int r =
sqlite3_exec( database,
sql,0 );
//NSLog(@"r = %d",r);
}
NSLog(@"r = %d",r);
[s release];
}
@catch (NSException * em) {
NSLog(@"
Failed to read %@",[em description]);
}
@finally {
//NSLog(@"
Failed to read %@",[e description]);
}
}
intresult =
sqlite3_exec(database,&error); //COMMIT
我觉得这次应该i哦y验 饿
我把其中一个update搞失败? 找不到key?
@H_
502_235@
【2】创建表格
@H_
502_235@ //创建表格,假设有五个字段,(id,cid,title,imageData ,imageLen )
@H_
502_235@ //说明一下,id为表格的主键,必须有。
@H_
502_235@ //cid,和title都是字符串,imageData是二进制数据,imageLen 是该二进制数据的长度。 - (BOOL) createChannelsTable:(
sqlite3*)db{ char *
sql = "CREATE TABLE channels (id integer primary key,\ cid text,\ title text,\ imageData BLOB,\ imageLen integer)";
sqlite3_stmt *statement; if(
sqlite3_prepare_v2(db,&statement,nil) !=
sqlITE_OK) { NSLog(@"Error:
Failed to prepare statement:create channels table"); return NO; } int success =
sqlite3_step(statement);
sqlite3_finalize(statement); if ( success !=
sqlITE_DONE) { NSLog(@"Error:
Failed to dehydrate:CREATE TABLE channels"); return NO; } NSLog(@"Create table 'channels' successed."); return YES; }