sqlite3笔记(二)

本文详细介绍了SQLite3的几个关键接口函数,包括sqlite3_open用于打开或创建数据库,sqlite3_close用于关闭数据库,sqlite3_exec用于执行SQL并回调处理结果,sqlite3_get_table用于执行SQL查询并获取二维数组结果,以及sqlite3_free_table用于释放查询结果的内存。通过这些函数,可以灵活地操作SQLite3数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sqlite常用的接口函数:

1、sqlite3_open

 功能:打开一个数据库,如果该数据库不存在,则会自动创建,打开或者创建数据库的命令会被缓存,直到这个数据库真正被调用的时候才会被执行

 原型:int sqlite3_open(const char *dname,sqlite3 **db) 

 参数:dname:要打开的数据库的名字,包含路径,SQLite支持内存数据库,内存方式存储使用文件名".memory"

          db:返回的打开的数据库句柄

 返回值:成功,返回SQLITE_OK,失败,返回其他值

2、sqlite3_close

  功能:关闭一个已经打开的数据库,与sqlite3_open匹配使用

  原型:int sqlite3_close(sqlite3 *db)

       参数:db:打开的数据库句柄

       返回值:成功,返回SQLITE_OK,失败,返回其他值

3、sqlite3_exec

  功能:编译和执行0个或多个SQL语句,查询的结果返回给调用函数callback

  原型:int sqlite3_exec(sqlite3 *db,const *sql,sqlite_callback callback,void *para,charr **errmsg)

  参数:db:数据库句柄;

      sql:待执行的SQL语句

           callback:回调函数,用以处理查询结果,如果不需要回调,可以输入NULL

           para:用户传入的参数,可以为NULL

           errmsg:char指针,返回错误信息

            回调函数callback:

             原型:int (*sqlite_callback)(void *para,int columnCount,char **columnValue,char **columnName)

             参数:para:从sqlite3_exec()传入的参数指针

                 columnCount:查询到的该记录的列数

                 columnValue:一维数组,查询出的数据,数组里的每一个元素但是char*值,是一个字段内容(用字符串表示,以'\0'结尾)

                 columnName:该字段的名称

  

 返回值:成功,返回SQLITE_OK,失败,返回其他值

4、sqlite3_get_table

  功能:执行SQL查询

  原型:int sqllite3_get_table(sqlite3 *db,const *zSql,char ***Result,int *pnRow,int *pnColumn,char **errmsg)

       参数:db:数据库句柄

           zSql:SQL得执行的字符串,

      Result:查询结果,是由字符串组成的一维数组

           pnRow:查询出有多少条记录,即查出多少行

           pnColumn:查询出的记录有多少个字段,即有多少列

           errmsg:错误信息

 返回值:成功,返回SQLITE_OK,失败,返回其他值

5、sqlite3_free_table

  功能:释放查询结果内存所占用的内存,在sqlite3_get_table()后面使用,注释该函数的输出参数里的符号集

  原型:void sqlite3_free_table(char **result)

  参数:result:是sqlite3_get_table()查询到的记录结果集

       返回值:无

    灵活使用上面几个函数的示例:

创建数据库:

#include <stdio.h>
#include <sqlite3.h>

static sqlite3 *db = NULL;
static char *errmsg = NULL;

int main()
{
    int ret;

    ret = sqlite3_open("book.db",&db);
    ret = sqlite3_exec(db,"insert into book(id,name,sex,age,tel,phone,address) values(7,'Hero','f',89,'83211334','1344213114','东北')",0,0,&errmsg);
    
    if(ret)
    {
        printf("exec failed!!\n");
    }
    else
    {
        printf("exec success!\n");
    }

    sqlite3_close(db);
    return 0;
}
调试结果:

exec success!

查看数据库数据表的所有数据:

#include <stdio.h>
#include <sqlite3.h>

static sqlite3 *db = NULL;
static char **Result = NULL;
static char *errmsg = NULL;

int main()
{
    int ret;
    int i;
    int j;
    int nrow;
    int ncolumn;

    ret = sqlite3_open("book.db",&db);
    ret = sqlite3_get_table(db,".mode column",&Result,&nrow,&ncolumn,&errmsg);
    ret = sqlite3_get_table(db,".head on",&Result,&nrow,&ncolumn,&errmsg);
    ret = sqlite3_get_table(db,"select *from book",&Result,&nrow,&ncolumn,&errmsg);

    if(ret)
    {
        printf("query fail!\n");
    }
    else
    {
        printf("query success!\n");
        for(i = 0;i < nrow;i++)
        {
            for(j = 0;j < ncolumn;j++)
            {
                printf("%9s",Result[i * ncolumn + j]);
            }
            printf("\n");
        }
    }

    sqlite3_free_table(Result);
    sqlite3_close(db);
    return 0;
}

调试结果:

query success!
       id     name      sex      age      tel    phone  address
        1     Echo        f       21 8676955615850692105   江苏
        4    Chile        f       12 862131311585531312   湖南
        3     Lino        m       54 84329101127362929137   北京
        2      Leo        m       2086768312118936752866   江苏
        5    Beibo        m       4386374293418321321344   新疆
        5    Beibo        m       4386374293418321321344   新疆
        5    Beibo        m       4386374293418321321344   新疆
        5    Beibo        m       4386374293418321321344   新疆
        7     Hero        f       89 832113341344213114   东北
        7     Hero        f       89 832113341344213114   东北
        7     Hero        f       89 832113341344213114   东北

利用回调函数和sqlite3_exec函数查询数据库里的字段:

#include <stdio.h>
#include <sqlite3.h>

static int callback(void *para,int columnCount,char **columnValue,char **columnName)
{
    int i;

    printf("记录包含%d个字段\n",columnCount);
    for(i = 0;i < columnCount;i++)
    {
        printf("字段名:%s,字段值:%s\n",columnName[i],columnValue[i]);
    }
    printf("---------------------\n");
    return 0;
}

int main()
{
    sqlite3 *db;
    int result;
    char *errmsg = NULL;

    result = sqlite3_open("book.db",&db);
    if(result)
    {
        printf("Open database failed!\n");
        return -1;
    }

    result = sqlite3_exec(db,"select *from book",callback,NULL,&errmsg);

    sqlite3_close(db);
    return 0;
}

调试结果:

记录包含7个字段
字段名:id,字段值:1
字段名:name,字段值:Echo
字段名:sex,字段值:f
字段名:age,字段值:21
字段名:tel,字段值:86769556
字段名:phone,字段值:15850692105
字段名:address,字段值:江苏
---------------------
记录包含7个字段
字段名:id,字段值:4
字段名:name,字段值:Chile
字段名:sex,字段值:f
字段名:age,字段值:12
字段名:tel,字段值:86213131
字段名:phone,字段值:1585531312
字段名:address,字段值:湖南
---------------------
记录包含7个字段
字段名:id,字段值:3
字段名:name,字段值:Lino
字段名:sex,字段值:m
字段名:age,字段值:54
字段名:tel,字段值:84329101
字段名:phone,字段值:127362929137
字段名:address,字段值:北京
---------------------
记录包含7个字段
字段名:id,字段值:2
字段名:name,字段值:Leo
字段名:sex,字段值:m
字段名:age,字段值:20
字段名:tel,字段值:867683121
字段名:phone,字段值:18936752866
字段名:address,字段值:江苏
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:5
字段名:name,字段值:Beibo
字段名:sex,字段值:m
字段名:age,字段值:43
字段名:tel,字段值:863742934
字段名:phone,字段值:18321321344
字段名:address,字段值:新疆
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------
记录包含7个字段
字段名:id,字段值:7
字段名:name,字段值:Hero
字段名:sex,字段值:f
字段名:age,字段值:89
字段名:tel,字段值:83211334
字段名:phone,字段值:1344213114
字段名:address,字段值:东北
---------------------




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值