加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLLite (四):sqlite3_prepare_v2,sqlite3_step

发布时间:2020-12-12 19:45:31 所属栏目:百科 来源:网络整理
导读:如果既不想写回调函数,又想避免 sqlite3_get_table之后麻烦 的一维数组遍历,那么利用sqlite3_prepare_v2执行sql select语句,让后sqlite3_step遍历select执行的返回结果是一个非常方便的solution. 当然,你必须要明白sqlite3_prepare_v2不仅仅能够执行tabl
如果既不想写回调函数,又想避免 sqlite3_get_table之后麻烦 的一维数组遍历,那么利用sqlite3_prepare_v2执行sql select语句,让后sqlite3_step遍历select执行的返回结果是一个非常方便的solution. 当然,你必须要明白sqlite3_prepare_v2不仅仅能够执行table的query selection,也能方便地进行sql Delete,Insert,Update等其他一些操作。它能帮你把sql语句的执行操作变的更加优雅。

[cpp] view plain copy
  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")等等。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读