Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4451219
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: SQLite/嵌入式数据库

2011-08-14 10:06:39

3. sqlite3_errcode():错误输出函数
4. sqlite3_prepare():预处理函数
5. sqlite3_free_table(): 查询释放函数
6. sqlite3_exec();  非查询执行函数



1.函数原型 sqlite3_exec(); 执行函数
 
   int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback,void *param,char** errmsg)

参数说明:
   sqlite3* : 指sqlite的操作句柄
   sql:      执行的居停sql语句
   sqlite_callback: 执行的具体回调函数,在sqlite3_exec函数中支持回调函数,即对于本函数执行的结果,用户可以在回调函数中进行更进一步的处理,当然回调函数多用于数据查询中,在执行delete或者是insert语句时,大多不需要编写回调函数,置NULL即可

   param: 回调函数中所用到的入口参数
   errmsg:用于指向当函数执行错误时出错的信息

   sqlite3_exec函数在执行完毕后,会返回0,如果返回值不为0,则可以通过查看errmsg来查看具体的出错信息

2. 函数的使用示意
    对于sqlite3_exec函数,使用的基本流程如下
 

  1.     sqilte3 *pdb =NULL;
  2.     sqlite3_open("test.db",&pdb);
  3.     char *sql = "insert into test values(1,2)";
  4.     char *szerrrmsg = 0;
  5.     sqlite3_exec(pdb,sql,0,0,&szerrmsg);
  6.     sqlite3_close(pdb);


2. 数据查询函数

1.基于回调的查询
    基于回调的查询,是指利用sqlite3_exec()函数进行查询,sqlite3_exec函数在前面已经介绍,看一下回调函数
   typedef int (*sqlite3_callback) (void *para,int ncolum,char **pvalue,char **pname)

各个参数:
   para:指sqlite3_exec中传给回调函数的入口参数,通过para参数,用户可以传入一些具体的值,也可以传入一些特殊的指针,例如一个类指针、进过整合的一个机构指针等。当然这些数据类型在使用之前先要执行强制类型转换,转换的原型为
() type *p = (type) para;

  ncolumn: 用于指明本条记录有多少个字段
  pavlue: 用于保存本记录中各字段的具体的数值,也就是查询结果
  pname:  用于保存本记录中各字段具体的名称

2. 基于回调的查询示例

  1. int callbackfun(void *para,int ncolumn, char *ppvalue,char *pname)
  2. {
  3.     int i;
  4.     for(i = 0; i < ncolumn; i++)
  5.     {
  6.         printf("%s->%s |",pname[i],pvalue[i]);
  7.     }
  8.     printf("\n");
  9. }

  10. void main()
  11. {
  12.     sqlite3 *pdb = NULL;
  13.     sqlite3_open("test.db",&pdb);
  14.     char *sql = "select from test"
  15.     char *szerrmsg = 0;
  16.     sqlite3_exec(pdb,sql,callbackfun,0,&szerrmsg);
  17.     sqlite3_close(pdb);
  18. }


3. 非回调查询

   在sqlite中也支持另一种查询方式,即采用非回调的方式进行,这种方式更符合通常的使用习惯,查询一次,返回一个结果集。

   int sqlite3_get_table(sqlite3*, const *sql, char **resultp,int *nrow, int *ncolumn, char **errmsg);

  参数说明:
   sqlite3*: 指已经打开的数据库句柄
   sql     : 指要执行的sql语句
   resutlp : 用于保存本次查询结果集的指针
   nrow:     用于返回记录数,即行数
   ncolumn: 用于返回查询的字段数,即列数
   errmsg  :用于返回查询出得错误信息

  1. void main()
  2. {
  3.     sqlite3 *pdb =NULL;
  4.     sqlite3_open("test.db",&pdb);
  5.     char *sql = "select 8 from test"
  6.     char *szerrmsg = 0;
  7.     int result;
  8.     char **dbresult;
  9.     int nrow,ncolumn;
  10.     result = sqlite3_get_table(pdb,sql,&dbresult,&nrow,&ncolumn,&errmsg);

  11.     if(SQLITE_OK != result)
  12.     {
  13.         printf("failed\n");
  14.     }
  15.     else
  16.     {
  17.         //查询成功
  18.         index = ncolumn;
  19.         printf("查到%d条记录\n",nrow);
  20.         
  21.         for(int i = 0; i < nrow; i++)
  22.         {
  23.             ...
  24.         }
  25.         sqlite3_free_table(dbresult);
  26.         sqltie3_close(pdb);
  27.     }
  28. }


阅读(2371) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~