SQLite简单使用及其常用函数介绍

7 篇文章 0 订阅
3 篇文章 1 订阅

SQLite介绍

        SQLite是一个软件库,实现了自给自足的,无服务器的,零配置的,事务性的SQL数据库引擎。且SQLite源代码不受版权限制。本文主要介绍SQLite在C/C++中的使用,以及最后给出在mfc中使用示例,但是在mfc中具体使用需要自己将源码导入到项目中才能调用。

        Windows安装:搜索SQLite官网或访问https://www.sqlite.org/download.html页面,从在windows区下载预编译二进制文件,如sqlite-tools-win32-xxx-*.zip和sqlite-dll-win32-xxx-*.zip文件,然后创建一个文件夹sqlite,解压缩文件到该目录,得到sqlite3.def,sqlite3.dll和sqlite3.exe文件等,最后将该目录添加到path环境变量中。        

        Linux安装:目前几乎所有版本的Linux版本都附带了SQLite,如果没有,就去SQLite网页下载sqlite-autoconf-*.tar.gz文件,执行步骤如下:

$ tar xvzf sqlite-autoconf-3071502.tar.gz
$ cd sqlite-autoconf-3071502
$ ./configure --prefix=/usr/local
$ make
$ make install

        安装完成后,可在命令行输入sqlite3,显示SQLite版本信息。

SQLite-C/C++接口

sqlite3_open:

/*
** CAPI3REF: Opening A New Database Connection
**
** 该例程打开一个指向SQLite数据库文件的连接,
** 如果filenam参数为NULL,那么sqlite3_open()将会在内存中** 创建一个数据库;
** 如果filename名称文件不存在,那么sqlite3_open()将自动创建一个该名称数据库并打开。
**
*/
int sqlite3_open(
  const char *filename,   /* Database filename (UTF-8) */
  sqlite3 **ppDb          /* OUT: SQLite db handle */
);

sqlite3_get_table:

/*
** CAPI3REF: Convenience Routines For Running Queries
** 举个例子,假设查询结果如下:
** <pre>
**        Name        | Age
**        -----------------------
**        Alice       | 43
**        Bob         | 28
**        Cindy       | 21
** </pre>
**
** 如果第三个参数是&azResult,那么在函数执行返回后azResult中数据如下:
** <pre>
**        azResult[0] = "Name";
**        azResult[1] = "Age";
**        azResult[2] = "Alice";
**        azResult[3] = "43";
**        azResult[4] = "Bob";
**        azResult[5] = "28";
**        azResult[6] = "Cindy";
**        azResult[7] = "21";
** </pre>
**
** 注意第四和第五个参数,返回查询结果的行和列,如上查询结果,那么*nrow等于3,*ncolumn等于2
** 通常,一般插入到azResult数组中的个数为((*nrow) + 1)*(*ncolumn)。
**
** 调用函数使用结果后,应该调用sqlite3_free_table(azResult)函数正确地,安全地释放内存。
** 
*/
int sqlite3_get_table(
  sqlite3*,              /* 一个打开的数据库 */
  const char *sql,       /* 需要执行的SQL语句 */
  char ***resultp,       /* 查询结果数组 */
  int *nrow,             /* 查询结果的行数 */
  int *ncolumn,          /* 查询结果的列数 */
  char **errmsg          /* 错误信息 */
);
void sqlite3_free_table(char **result);

sqlite3_exec:

/*
** CAPI3REF: One-Step Query Execution Interface
**
** 第三个参数为回调函数,对查询结果每行都调用一次;
** 一般返回0,如果回调返回非0,则查询中止,后续sql语句跳过。
** 第四个参数为任意指针,作为回调函数的第一个参数。
**
*/
typedef int (*sqlite3_callback)(
    void*,                                  /* sqlite3_exec中第四个参数 */
    int azcolumn,                           /* 查询结果列数 */
    char** azValue,                         /* 查询结果的值 */
    char** azName                           /* 查询结果的字段名 */
);
int sqlite3_exec(
  sqlite3*,                                  /* 打开的数据库连接 */
  const char *sql,                           /* 一条或多条sql语句 */
  int (*callback)(void*,int,char**,char**),  /* 回调函数 */
  void *,                                    /* 回调函数的第一个参数 */
  char **errmsg                              /* 错误信息 */
);

sqlite3_close:

/*
** CAPI3REF: Closing A Database Connection
** 关闭一个数据库连接
** 
*/
int sqlite3_close(sqlite3 *);

SQLite使用(C++/MFC):

sqlite3 *pDB;
CString singleResult;
static int callback(void *data, int azcolumn, char **azValue, char **azName ){
    for(int i=0; i < azcolumn; i++){
        singleResult = azName[i] + ":" + azValue[i];
    }
    return 0;
}
if(!sqlite3_open( "myDB.db", &pDB) ){
    char sql[ 100 ];
    char **azResult;
    int row = 0;
    int column = 0;
    const char* data = "CallBack Function called!"
    char * errmsg = NULL;
    strcpy(sql, "select * from student" );
    sqlite3_get_table( pDB, sql, &azResult, &row, &column, &errmsg );
    //sqlite3_exec( pDB, sql, callback, (void*)data, &errmsg);
    for( int i = 1; i<row + 1; i++ ){
        singleResult = *( azResult + i*colum );
    }
    sqlite3_free_table( azResult );
}
sqlite3_close(pDB);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值