日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQLLite (四):sqlite3_prepare_v2,sqlite3_step

發(fā)布時間:2024/4/11 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQLLite (四):sqlite3_prepare_v2,sqlite3_step 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
如果既不想寫回調(diào)函數(shù),又想避免sqlite3_get_table之后麻煩的一維數(shù)組遍歷,那么利用sqlite3_prepare_v2執(zhí)行sql select語句,讓后sqlite3_step遍歷select執(zhí)行的返回結(jié)果是一個非常方便的solution. 當(dāng)然,你必須要明白sqlite3_prepare_v2不僅僅能夠執(zhí)行table的query selection,也能方便地進(jìn)行sql Delete, Insert, Update等其他一些操作。它能幫你把sql語句的執(zhí)行操作變的更加優(yōu)雅。

[cpp]?view plaincopy
  • int?sqlite3_prepare_v2(??
  • ??sqlite3?*db,????????????<span?style="color:#009900;">/*?Database?handle?*/</span>??
  • ??const?char?*zSql,???????<span?style="color:#009900;">/*?SQL?statement,?UTF-8?encoded?*/</span>??
  • ??int?nByte,??????????????<span?style="color:#009900;">/*?Maximum?length?of?zSql?in?bytes.?*/</span>??
  • ??sqlite3_stmt?**ppStmt,??<span?style="color:#009900;">/*?OUT:?Statement?handle?*/</span>??
  • ??const?char?**pzTail?????<span?style="color:#009900;">/*?OUT:?Pointer?to?unused?portion?of?zSql?*/</span>??
  • );??
  • [cpp]?view plaincopy
  • int?sqlite3_step(sqlite3_stmt*);??
  • 下面以一段iOS中的selection查詢?yōu)槔f明二者的用法:

    [cpp]?view plaincopy
  • -(void)InitializeFilesTable??
  • {??
  • ????const?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);??
  • ????????<span?style="color:#009900;">//?The?table?has?not?been?created.?Most?likely,?this?is?the?first?time?we?create?the?database.??
  • ????????//?Therefore,?create?all?tables?in?it</span>??
  • ????????char?*?sql?=?"Create?TABLE?[FileObjects]?([FileId]?VARCHAR(128),[FileExt]?VARCHAR(128),?[FileName]?VARCHAR(128),?[FileUrl]?VARCHAR(128),?[FileType]?INT??);";?<span?style="color:#009900;">//?NOXLATE</span>??
  • ????????char?*?errMsg;??
  • ????????result?=?sqlite3_exec(mDatabase,?sql,?NULL,?NULL,?&errMsg);??
  • ????}??
  • ????else??
  • ????{??
  • ????????<span?style="color:#009900;">//?Select?returns?OK,?initialize?the?memory?model?from?the?result</span>??
  • ????????NSMutableDictionary?*?files?=?[NSMutableDictionary?new];??
  • ????????while(sqlite3_step(stmt)?==?SQLITE_ROW)??
  • ????????{??
  • ????????????FileObject?*?file?=?[FileObject?new];??
  • ??????????????
  • ????????????const?char?*?str?=?(const?char?*)sqlite3_column_text(stmt,?0);??
  • ????????????file.FileId?=?str??[[NSString?alloc]?initWithUTF8String:str]?:?@"";??
  • ??????????????
  • ????????????str?=?(const?char?*)sqlite3_column_text(stmt,?1);??
  • ????????????file.FileExt?=?str??[[NSString?alloc]?initWithUTF8String:str]?:?@"";??
  • ??????????????
  • ????????????str?=?(const?char?*)sqlite3_column_text(stmt,?2);??
  • ????????????file.FileName?=?str??[[NSString?alloc]?initWithUTF8String:str]?:?@"";??
  • ??????????????
  • ????????????str?=?(const?char?*)sqlite3_column_text(stmt,?3);??
  • ????????????file.FileUrl?=?str??[[NSString?alloc]?initWithUTF8String:str]?:?@"";??
  • ??????????????
  • ????????????file.FileType?=?sqlite3_column_int(stmt,?4);??
  • ??????????????
  • ????????????[files?setObject:file?forKey:file.FileId];??
  • ????????}??
  • ??????????
  • ????????sqlite3_finalize(stmt);??
  • ????????[mFiles?setDictionary:files];??
  • ????}??
  • }??
  • 這其中包括對sqlite3_exec的調(diào)用。sqlite3_exec可以執(zhí)行任何sql語句,包括事務(wù)("BEGIN TRANSACTION")、回滾("ROLLBACK")和提交("COMMIT")等等。

    總結(jié)

    以上是生活随笔為你收集整理的SQLLite (四):sqlite3_prepare_v2,sqlite3_step的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。