Linux下c语言编程操作sqlite3数据库

Linux下c语言编程操作sqlite3数据库

1. 安装数据库
我们从sqlite官网下载页面,https://www.sqlite.org/download.html从源代码区下载 sqlite-autoconf-*.tar.gz。
然后在Linux下安装sqlite3
liguangming@ubuntu-14:~/sqlite$ wget https://www.sqlite.org/2021/sqlite-autoconf-3350500.tar.gz
liguangming@ubuntu-14:~/sqlite$ tar -xzvf sqlite-autoconf-3350500.tar.gz
liguangming@ubuntu-14:~/sqlite$ cd sqlite-autoconf-3350500/
liguangming@ubuntu-14:~/sqlite/sqlite-autoconf-3350500$ ./configure
liguangming@ubuntu-14:~/sqlite/sqlite-autoconf-3350500$ make
liguangming@ubuntu-14:~/sqlite/sqlite-autoconf-3350500$ sudo make install
liguangming@ubuntu-14:~/sqlite$ sqlite3
SQLite version 3.35.5 2021-04-19 18:32:05
Enter “.help” for usage hints.
Connected to a transient in-memory database.
Use “.open FILENAME” to reopen on a persistent database.
sqlite>
看到sqlite的版本则说明安装成功

2. 几个重要的 C&C++ / SQLite接口 API

2.1 **sqlite3_open(const char *filename, sqlite3 db)
函数作用:用来打开一个数据库
参数说明:第一个参数filename是数据库的名称
第二个参数db保存打开的数据库文件filename的信息
成功函数返回SQLITE_OK

2.2 *sqlite3_exec(sqlite3 db, const char *sql, sqlite_callback, void *data, char errmsg)
函数作用:用来执行sql语句
参数说明:第一个参数db 是打开的数据库对象
第二个参数是要执行的语句
第三个参数 sqlite_callback 是一个回调函数 ,这条语句执行之后会调用这个sqlite_callback 函数
第四个是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回
调函数,可以填NULL。
第五个参数errmsg 将被返回用来获取程序生成的任何错误。
成功函数返回SQLITE_OK

2.3 *sqlite_callback (void * arg,int f_num,char * * f_value, char * f_name)
函数功能:用户处理的查询结果
参数说明:第一个参数arg是sqlite3_exec传入的参数指针
第二个参数f_num是记录中包含的字段数目
第三个参数f_value是包含字段值的指针数值
第四个参数f_name是包含每个字段名称的指针数组
成功返回SQLITE_OK

2.4 sqlite3_close(sqlite3 db)*
函数作用:关闭数据库
参数说明:db为要关闭的数据库文件
成功函数返回SQLITE_OK

2.5 **int sqlite3_get_table(sqlite3 *db, const char *zsql,char ***pazResult, int *nrow, int *ncolumn,char zErrmsg);
函数作用:执行sql查询功能
参数说明:第一个参数db:db是用于保存打开的数据库文件dbname的信息;
第二个参数:sqlite3的语句,跟sqlite3_exec里的sql是一样的,是一个很普通的以\0结尾的char *字符串。
第三个参数:查询的结果,它依然是一维数组,他的内存布局时:字段名称,后面时紧接着是每个字段值。
第四个参数:是查询出多少条记录(即查出是多少行,不包括字段名那行)
第五个参数:是多少个字段(多少列)
第六个参数:是错误信息

3 创建一个简单的学生成绩数据库并实现简单的添加,查询,删除,更新,退出功能
代码如下

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

int do_insert(sqlite3 *db)  //添加函数
{
        int    stuid;
        char   name[32];
        int    score;
        char   sql[512];
        char * errmsg;

        printf("please input stuid:");
        scanf("%d",&stuid);

        printf("please input name:");
        scanf("%s",name);

        printf("please input score:");
        scanf("%d",&score);

        sprintf(sql,"insert into stu values(%d,'%s',%d);",stuid,name,score);
        if( sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK  )
        {
                printf("input values failed:%s\n",errmsg);
        }
        else
        {
                printf("Input success\n");
        }

        return 0;
}

int callback(void *arg, int num, char **value,char **name) //回调函数
{
        int i=0;
        for(i=0; i<num; i++)
        {
                printf("%-16s",value[i]);
        }
        printf("\n");
        return 0;
}

int do_query(sqlite3 *db)  //查询函数
{
        char    sql[512];
        char *  errmsg;
        sprintf(sql,"select * from stu");

        if( sqlite3_exec(db,sql,callback,NULL,&errmsg) !=SQLITE_OK  )
        {
                printf("query failed:%s\n",errmsg);
        }
        else
        {
                printf("query success\n");
        }
        return 0;
}

int do_delete(sqlite3 *db)  //删除函数
{
        int    stuid;
        char   sql[512];
        char * errmsg;
        
        printf("please input stuid to be deleted:");
        scanf("%d",&stuid);

        sprintf(sql,"delete from stu where stuid=%d",stuid);

        if( sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK  )
        {
                printf("delete failed:%s\n",errmsg);
        }
        else
        {
                printf("delete success\n");
        }

        return 0;
}

int do_update(sqlite3 *db)  //更新函数
{
        int    stuid;
        int    score;
        char   sql[512];
        char * errmsg;
        
        printf("please input stuid to be changed:");
        scanf("%d",&stuid);

        printf("update score:");
        scanf("%d",&score);

        sprintf(sql,"update stu set score=%d where stuid = %d",score,stuid);

        if( sqlite3_exec(db,sql,NULL,NULL,&errmsg) !=SQLITE_OK  )
        {
                printf("update failed:%s\n",errmsg);
        }
        else
        {
                printf("update success\n");
        }

        return 0;
}

int main(int argc, char **argv)
{
        sqlite3 *  db;
        char *     dbname="stu.db";
        char *     errmsg;
        int        cmd;
        if( sqlite3_open(dbname,&db) != SQLITE_OK)
        {
                printf("stu.db create failed:%s\n ",sqlite3_errmsg(db));
                return -1;
        }
        else
        {
                printf("Open stu.db success\n");
        }

        // 创建一张数据库的表格

        if(sqlite3_exec(db,"create table stu (stuid Integer , name char ,score Intege);",NULL,NULL,&errmsg) != SQLITE_OK)
        {

                printf("create table failed:%s\n",errmsg);
        }
        else
        {
                printf("create table success\n");
        }

        while(1)
        {
                printf("##########################################\n");
                printf("1:insert 2:query 3:delete 4:update 5:quit\n");
                printf("##########################################\n");

                printf("please input cmd:");
                scanf("%d",&cmd);

                switch(cmd)
                {
                        case 1:
                                do_insert(db);
                                break;
                        case 2:
                                do_query(db);
                                break;
                        case 3:
                                do_delete(db);
                                break;
                                                              163,1-8       88%
                                break;
                        case 4:
                                do_update(db);
                                break;
                        case 5:
                                sqlite3_close(db);
                                exit(0);
                        default:
                                printf("cmd error\n");
                }
        }
}

编译时要加上-lsqlite3,不然会报错在这里插入图片描述
查看当前目录下的后缀名为.db的文件就是创建好的数据库
在这里插入图片描述
运行结果:
添加数据
在这里插入图片描述

在这里插入图片描述

查询结果
在这里插入图片描述

删除数据
在这里插入图片描述

在这里插入图片描述

更改数据

在这里插入图片描述

在这里插入图片描述

sqlite的进一步学习可以参考这个链接https://www.runoob.com/sqlite/sqlite-intro.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值