如果既不想写回调函数,又想避免
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;"></span>
- constchar*zSql,<spanstyle="color:#009900;"></span>
- intnByte,0); background-color:inherit">/*MaximumlengthofzSqlinbytes.*/</span>
- sqlite3_stmt**ppStmt,0); background-color:inherit">/*OUT:Statementhandle*/</span>
- char**pzTail<spanstyle="color:#009900;"></span>
- );
copy
intsqlite3_step(sqlite3_stmt*);
下面以一段iOS中的selection查询为例说明二者的用法:
copy
-(void)InitializeFilesTable
- {
- char*query="SELECT*FROM[FileObjects]";
- sqlite3_stmt*stmt;
- intresult=sqlite3_prepare_v2(mDatabase,query,-1,&stmt,NULL);
- if(SQLITE_OK!=result)
- {
- sqlite3_finalize(stmt);
- <spanstyle="color:#009900;">
-
- char*sql="CreateTABLE[FileObjects]([FileId]VARCHAR(128),[FileExt]VARCHAR(128),[FileName]VARCHAR(128),[FileUrl]VARCHAR(128),[FileType]INT);";<spanstyle="color:#009900;">
- 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")等等。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|