sqlite数据库C语言编程

【1】.打开数据库

int sqlite3_open(char *db_name,sqlite3 **db);

功能:

    打开数据库。

参数:

    db_name:数据库文件名,若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码。

    sqlite3:数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。

返回值:

    成功返回SQLITE_OK,失败返回非 SQLITE_OK。

 

【2】.关闭数据库

int sqlite3_close(sqlite3 *db);

功能:

    关闭数据库、释放打开数据库时申请的资源。

参数:

    db:数据库的标识。

返回值:

    成功返回 SQLITE_OK。

    失败返回非 SQLITE_OK。

 

注意:

    sqlite3使用了两个库:pthread、dl,故链接时应加上 -lpthread和 -ldl。

  1 #include <stdio.h>
  2 #include "sqlite3.h"
  3 sqlite3 * ppDB = NULL;
  4 
  5 int main(int argc, const char *argv[])
  6 {
  7     int ret = 0; 
  8     //打开数据库 
  9     ret = sqlite3_open("stu.db",&ppDB); 
 10     if(ret != SQLITE_OK){ 
 11         printf("sqlite3_open failed...\n"); 
 12         return -1; 
 13     }  
        //对数据库的操作
        ...
        //关闭数据库
 18     ret = sqlite3_close(ppDB);
 19     if(ret != SQLITE_OK){
 20         printf("sqlite3_close failed...\n");
 21         return -1;
 22     }   
 23     
 24     return 0;
 25 }   

【3】数据库操作——回调方法

int sqlite3_exec(sqlite3 *db,

  const char *sql,

exechandler_t callback,

void *arg,

char **errmsg);

 

功能:执行sql指向的SQL语句,若结果集不为空,函数会调用函数指针callback所指向的函数。

参数:

    db:数据库的标识。

    sql:SQL语句(一条或多条),以’;’结尾。

  callback:是回调函数指针,当这条语句执行之后sqlite3会去调用你提供的这个函数。

    arg:当执行sqlite3_exec的时候传递给回调函数的参数。

    errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。

     打印错误信息方法:printf("%s\n", errmsg);

 

回调函数指针:

typedef int (*exechandler_t)(void *para,int n_column,char **column_value,

char **column_name);

功能:

此函数由用户定义,当sqlite3_exec函数执行sql语句后,结果集不为空时sqlite3_exec函数会自动调 用此函数,每次调用此函数时会把结果集的一行信息传给此函数。

参数:

para:sqlite3_exec传给此函数的参数,para为任意数据类型的地址。

n_column:结果集的列数。

column_value:指针数组的地址,其存放一行信息中各个列值的首地址。

column_name:指针数组的地址,其存放一行信息中各个列值对应列名的首地址。

返回值:

若为非0值,则通知sqlite3_exec终止回调。

1 #include <stdio.h>
  2 #include "sqlite3.h"
  3 
  4 sqlite3 * ppDB = NULL;
  5 
  6 int num = 20;
  7 
  8 char *errmsg;
  9 //回调函数
 10 int my_callback(void *para,int n_column,char **column_value,\
                     char **column_name)
 11 {
 12     int i = 0;
 13     printf("-------------------------------------------\n");
 14 
 15     printf("para:%d\n",*(int *)para);
 16     printf("n_column:%d\n",n_column);
 17 
 18     for(i = 0; i < n_column;i++){
 19         printf("%-20s    %-20s\n",column_name[i],column_value[i]);
 20     }
 21 
 22     printf("-------------------------------------------\n");                                                          
 23     return 0;
 24 }
 26 int main(int argc, const char *argv[])
 27 {
 28     int ret = 0;
 29 
 30                                                                                                                       
 31     ret = sqlite3_open("stu.db",&ppDB);
 32     if(ret != SQLITE_OK){
 33         printf("sqlite3_open failed...\n");
 34         return -1;
 35     }
        //回调方式操作数据库
 37     sqlite3_exec(ppDB,"select * from persons;",my_callback,\
                 (void *)&num,&errmsg);
 38 
 39 
 40     ret = sqlite3_close(ppDB);
 41     if(ret != SQLITE_OK){
 42         printf("sqlite3_close failed...\n");
 43         return -1;
 44     }
 45 
 46     return 0;
 47 }

【4】非回调方式操作数据库

int sqlite3_get_table(sqlite3 *db,const char *sql,

char ***resultp,int *nrow,int *ncolumn,char **errmsg);

 

功能:执行sql指向的SQL语句,函数将结果集相关的数据的地址保存在函 数的参数中

参数:

db:数据库的标识。

sql:SQL语句(一条或多条),以’;’结尾。

resultp:指针数组的地址,其记录了结果集的数据。内存布局:先依次存放各列的列名,然后是每一行各列的值。

nrow:结果集的行数(不包含列名)。

  ncolumn:结果集的列数。

  errmsg:错误信息。

 

void sqlite3_free_table(char **resultp);

功能:

释放sqlite3_get_table分配的内存。

参数:

结果集数据的首地址。

1 #include <stdio.h>
  2 #include "sqlite3.h"
  3 
  4 sqlite3 *ppDB = NULL;
  5 char **resultp = NULL;
  6 
  7 int nrow,ncolumn;                                                                                                     
  8 
  9 char *errmsg = NULL;
 10 
 11 int main(int argc, const char *argv[])
 12 {
 13     int ret = 0,i = 0, j = 0 ;
 14     ret = sqlite3_open("../stu.db",&ppDB);
 15     if(ret != SQLITE_OK){
 16         printf("sqlite3_open failed...\n");
 17         return -1;
 18     }
 19 
 20     /*
 21      *int sqlite3_get_table(sqlite3 *db,const char *sql,
 22      *  char ***resultp,int *nrow,int *ncolumn,char **errmsg);
 23      * */
 24     sqlite3_get_table(ppDB,"select * from persons;",&resultp,&nrow,&ncolumn,&errmsg);
 25 
 26     for(i = 0; i <= nrow; i++){
 27         for(j = 0; j < ncolumn;j++){
 28             printf("%-20s",resultp[i*ncolumn+j]);
 29         }
 30         printf("\n");
 31     }
 35     sqlite3_close(ppDB);
 37     return 0;
 38 }

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值