sqlite -API-sqlite3_exec()


sqlite3_exec用法
原型:
int sqlite3_exec(
  sqlite3* ppDb,                             /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);
执行sql语句
得到结果集,可通过回调函数输出
有回调函数

这就是执行一条sql 语句的函数。
第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。
第2个参数constchar*sql是一条sql 语句,以\0结尾。
第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写
法,以及这个参数的使用。
第5个参数char** errmsg 是错误信息。注意是指针的指针。sqlite3里面有很多固定的错误信息。执行sqlite3_exec 之后,执行失败时可以查阅这个指针(直接cout<<errmsg得到一串字符串信息,这串信息告诉你错在什么地方。sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。

说明:通常,sqlite3_callback 和它后面的void*这两个位置都可以填NULL。填NULL表示你不需要回调。比如你做insert 操作,做delete操作,就没有必要使用回调。而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

回调函数格式

int sqlite_callback(

    void* pv,    /* 由 sqlite3_exec() 的第四个参数传递而来 */
    int argc,        /* 表的列数 */
    char** argv,    /* 指向查询结果的指针数组, 可以由 sqlite3_column_text() 得到 */  //列内容
    char** col        /* 指向表头名的指针数组, 可以由 sqlite3_column_name() 得到 */  //列名
);
参数格式:
    传给sqlite3_exec的回调函数,用来显示查询结果
    对每一条查询结果调用一次该回调函数
参数:
    pv:由sqlite3_exec传递的初始化参数
    argc:表头的列数
    col:表头的名字数组指针
    argv:表头的数据数组指针
返回值:
    1:中断查找
    0:继续列举查询到的数据
示例表:
+-----------------------------------+
|  id  |  pic   |  data(16进制数据)  |
|-----------------------------------|
|   1  |  a.jpg |      00 00 00 ... |
|-----------------------------------|
|   2  |  b.jpg |     XX XX XX      |
+-----------------------------------+
对第一行数据:
    argc=3 即 [0]...[2]
    argv[0]="1",argv[1]="a.jpg",argv[2]="00 00 00..."(实际16进制数据,非这里显示的字符串形式)
    col[0]="id",col[1]="pic",col[2]="data"
说明:
    sqlite3_exec() 的回调函数必须按照此格式, 当然形参的名字任意.
    如果某列的数据类型不是char*, 则可以对结果执行相关的转换, 如:用atoi()把结果转换为整数(integer), 如果是二进制数据, 则可以直接强制类型转换, 如:(void*)argv[i].
    该回调函数有两种返回值类型.
        1.返回零:sqlite3_exec() 将继续执行查询.
        2.返回非零:sqlite3_exec()将立即中断查询, 且 sqlite3_exec() 将返回 SQLITE_ABORT.
示例:
    int i;
    for(i=0; i<argc; i++)
    {
        printf("%s\t%s\n\n", col[i], argv[i]);
    }

     return 0;

posted @ 2015-11-16 17:35  cuiz_book  阅读(2656)  评论(0编辑  收藏  举报