SQLLite (三):sqlite3_prepare_v2,sqlite3_step


如果既不想写回调函数,又想避免 sqlite3_get_table之后麻烦 的一维数组遍历,那么利用sqlite3_prepare_v2执行sql select语句,让后sqlite3_step遍历select执行的返回结果是一个非常方便的solution. 当然,你必须要明白sqlite3_prepare_v2不仅仅能够执行table的query selection,也能方便地进行sql Delete,Insert,Update等其他一些操作。它能帮你把sql语句的执行操作变的更加优雅。

  1. intsqlite3_prepare_v2(
  2. sqlite3*db,<spanstyle="color:#009900;">/*Databasehandle*/</span>
  3. constchar*zsql,<spanstyle="color:#009900;">/*sqlstatement,UTF-8encoded*/</span>
  4. intnByte,0); background-color:inherit">/*Maximumlengthofzsqlinbytes.*/</span>
  5. sqlite3_stmt**ppStmt,0); background-color:inherit">/*OUT:Statementhandle*/</span>
  6. char**pzTail<spanstyle="color:#009900;">/*OUT:Pointertounusedportionofzsql*/</span>
  7. );
copy
    intsqlite3_step(sqlite3_stmt*);
下面以一段iOS中的selection查询为例说明二者的用法

copy
    -(void)InitializeFilesTable
  1. {
  2. char*query="SELECT*FROM[FileObjects]";
  3. sqlite3_stmt*stmt;
  4. intresult=sqlite3_prepare_v2(mDatabase,query,-1,&stmt,NULL);
  5. if(sqlITE_OK!=result)
  6. {
  7. sqlite3_finalize(stmt);
  8. <spanstyle="color:#009900;">//Thetablehasnotbeencreated.Mostlikely,thisisthefirsttimewecreatethedatabase.
  9. //Therefore,createalltablesinit</span>
  10. char*sql="CreateTABLE[FileObjects]([FileId]VARCHAR(128),[FileExt]VARCHAR(128),[FileName]VARCHAR(128),[FileUrl]VARCHAR(128),[FileType]INT);";<spanstyle="color:#009900;">//NOXLATE</span>
  11. char*errMsg;
  12. result=sqlite3_exec(mDatabase,sql,NULL,&errMsg);
  13. }
  14. else
  15. //SelectreturnsOK,initializethememorymodelfromtheresult</span>
  16. NSMutableDictionary*files=[NSMutableDictionarynew];
  17. while(sqlite3_step(stmt)==sqlITE_ROW)
  18. FileObject*file=[FileObjectnew];
  19. char*str=(char*)sqlite3_column_text(stmt,0);
  20. file.FileId=str?[[NSStringalloc]initWithUTF8String:str]:@"";
  21. str=( file.FileExt=str?[[NSStringalloc]initWithUTF8String:str]:@"";
  22. str=( file.FileName=str?[[NSStringalloc]initWithUTF8String:str]:@"";
  23. file.FileUrl=str?[[NSStringalloc]initWithUTF8String:str]:@"";
  24. file.FileType=sqlite3_column_int(stmt,4);
  25. [filessetObject:fileforKey:file.FileId];
  26. [mFilessetDictionary:files];
  27. }
这其中包括sqlite3_exec的调用sqlite3_exec可以执行任何sql语句,包括事务( "BEGIN TRANSACTION" )、回滚( "ROLLBACK")和提交( "COMMIT")等等。

相关文章

安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压缩包。 创建s...
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下...
实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 6.查找会员  ...
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整...