sqlite3数据库连接完成之后,就可以执行sql命令了。下面将要介绍的prepare和step函数都是用来操作和执行sql命令的。
- /*createastatementfromansqlstring*/
- sqlite3_stmt*stmt=NULL;
- sqlite3_prepare_v2(db,sql_str,sql_str_len,&stmt,NULL);
- /*usethestatementasmanytimesasrequired*/
- while(...)
- {
- /*bindanyparametervalues*/
- sqlite3_bind_xxx(stmt,param_idx,param_value...);
- ...
- /*executestatementandstepovereachrowoftheresultset*/
- while(sqlite3_step(stmt)==sqlITE_ROW)
- /*extractcolumnvaluesfromthecurrentresultrow*/
- col_val=sqlite3_column_xxx(stmt,col_index);
- }
- /*resetthestatementsoitmaybeusedagain*/
- sqlite3_reset(stmt);
- sqlite3_clear_bindings(stmt);/*optional*/
- }
- /*destroyandreleasethestatement*/
- sqlite3_finalize(stmt);
- stmt=NULL;
这段程序首先调用sqlite3_prepare_v2函数,将一个sql命令字符串转换成一条prepared语句,存储在sqlite3_stmt类型结构体中。随后调用sqlite3_bind_xxx函数给这条prepared语句绑定参数。然后不停的调用sqlite3_step函数执行这条prepared语句,获取结果集中的每一行数据,从每一行数据中调用qlite3_column_xxx函数获取有用的列数据,直到结果集中所有的行都被处理完毕。
prepared语句可以被重置(调用sqlite3_reset函数),然后可以重新绑定参数之后重新执行。sqlite3_prepare_v2函数代价昂贵,所以通常尽可能的重用prepared语句。最后,这条prepared语句确实不在使用时,调用sqlite3_finalize函数释放所有的内部资源和sqlite3_stmt数据结构,有效删除prepared语句。
预处理(Prepare)