SQLLite (四):sqlite3_prepare_v2,sqlite3_step
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQLLite (三):sqlite3_
- 下一篇: SQLite3的提交事务代码