概述如果既不想写回调函数,又想避免 sqlite3_get_table之后麻烦 的一维数组遍历,那么利用sqlite3_prepare_v2执行sql select语句,让后sqlite3_step遍历select执行的返回结果是一个非常方便的solution. 当然,你必须要明白sqlite3_prepare_v2不仅仅能够执行table的query selection,也能方便地进行sql Del
如果既不想写回调函数,又想避免 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
intsqlite3_prepare_v2( sqlite3*db,<spanstyle="color:#009900;">/*Databasehandle*/</span> constchar*zsql,<spanstyle="color:#009900;">/*sqlstatement,UTF-8encoded*/</span> intnByte,0); background-color:inherit">/*Maximumlengthofzsqlinbytes.*/</span> sqlite3_stmt**ppStmt,0); background-color:inherit">/*OUT:Statementhandle*/</span> char**pzTail<spanstyle="color:#009900;">/*OUT:Pointertounusedportionofzsql*/</span> ); copy int
sqlite3_step(sqlite3_stmt*); 下面以一段iOS中的selection查询为例说明二者的用法:
copy
-(voID)Initializefilestable { char
*query="SELECT*FROM[fileObjects]"; sqlite3_stmt*stmt; int
result=sqlite3_prepare_v2(mDatabase,query,-1,&stmt,NulL); if
(sqlITE_OK!=result) { sqlite3_finalize(stmt); <spanstyle="color:#009900;">//Thetablehasnotbeencreated.Mostlikely,thisisthefirsttimewecreatethedatabase. //Therefore,createalltablesinit</span> char
*sql="Createtable[fileObjects]([fileID]VARCHAR(128),[fileExt]VARCHAR(128),[filename]VARCHAR(128),[fileUrl]VARCHAR(128),[fileType]INT);";<spanstyle="color:#009900;">//NOXLATE</span> char
*errMsg; result=sqlite3_exec(mDatabase,sql,NulL,&errMsg); } else
//SelectreturnsOK,initializethememorymodelfromtheresult</span>
NSMutableDictionary*files=[NSMutableDictionarynew]; while
(sqlite3_step(stmt)==sqlITE_ROW) fileObject*file=[fileObjectnew]; char
*str=(char*)sqlite3_column_text(stmt,0); file.fileID=str?[[Nsstringalloc]initWithUTF8String:str]:@""; str=(file.fileExt=str?[[Nsstringalloc]initWithUTF8String:str]:@""; str=(file.filename=str?[[Nsstringalloc]initWithUTF8String:str]:@""; file.fileUrl=str?[[Nsstringalloc]initWithUTF8String:str]:@""; file.fileType=sqlite3_column_int(stmt,4); [filessetobject:fileforKey:file.fileID]; [mfilessetDictionary:files]; } 这其中包括对sqlite3_exec的调用。sqlite3_exec可以执行任何SQL语句,包括事务( "BEGIN TRANSACTION" )、回滚( "RolLBACK")和提交( "COMMIT")等等。 总结 以上是内存溢出为你收集整理的SQLLite (四):sqlite3_prepare_v2,sqlite3_step全部内容,希望文章能够帮你解决SQLLite (四):sqlite3_prepare_v2,sqlite3_step所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)