sqlite3学习笔记
一、在ubuntu上安装sqlite数据库
1.安装sqlite3
sudo apt install sqlite3
2.安装sqlite编译所需要的工具包
sudo apt install libsqlite3-dev
二、sqlite3常用基本命令
1.系统命令
以“.”开头的命令为系统命令
.help 查看帮助
.quit 退出sqlite
.exit 退出sqlite
.schema 查看表的结构图
2.shell中的sqlite命令
sqlite命令不以“.”开头,但是要以“;”结尾
①建立一个数据库

②建立一张数据库表
create table stu(id Integer,name char,score Integer);
结果可以使用系统命令.schema查看

③插入一条记录
输入全部数据
insert into stu values(1001,'zhangsan',80);
输入一部分数据
insert into stu (name,score) values("lisi",90);
结果可使用命令select * from stu;查看全部数据

查看部分数据 select name,score from stu;

匹配查询 select * from stu where score=80;
select * from stu where score=80 and name="zhangsan";
select * from stu where score=80 or name="lisi";

④删除一条记录
delete from stu where socre=90;

⑤更新一条记录
update stu set name="wangwu" where id=1001;
update stu set name="lisi" ,score=100 where id=1001;

⑥插入一列字段
alter table 数据库表名 add column 新增字段 字段类型
alter table stu add column address char;

⑦删除一列
sqlite3不支持直接删除一列,可通过以下方法删除
1--创建一张新表
create table stu1 as select id,name,score from stu;
2--删除原有表
drop table stu;
3--将新表的名字改成原来的旧表的名字
alter table stu1 rename to stu;

三、sqlite3的C语言常用函数接口
1.sqlite3_open
int sqlite3_open(
const char *filename,/ *数据库文件名(UTF-8)* /
sqlite3 ** ppDb / * OUT:SQLite数据库句柄* /
);
功能:打开一个数据库
参数:filename 函数库路径
ppDb 数据库操作句柄
返回值:成功返回SQLITE_OK,错误则返回错误码
2.sqlite3_close
int sqlite3_close(sqlite3 *);
功能:关闭一个数据库
参数:数据库句柄
返回值:成功返回SQLITE_OK,错误则返回错误码
3.sqlite3_errmsg
const char * sqlite3_errmsg(sqlite3 *);
功能:返回一串错误信息的地址
参数:数据库句柄
返回值:错误信息字符串地址
4.sqlite3_exec
int sqlite3_exec( sqlite3 *db,/ *一个打开的数据库* / const char * sql,/ *要求值的SQL * / int(* callback)(void *,int,char **,char **),/ *回调函数* / void* arg,/ *回调的第一个参数* / char ** errmsg / *此处写的错误msg * / );
功能:执行一条sqlite操作语句,与shell中输入的一样
参数:db 数据库句柄
sql 要执行的命令
callback 回调函数,在搜索到一条数据时调用,每搜索到一条调用一次
arg 传给回调函数的参数
errmsg 传出参数,返回错误信息
返回值:成功返回SQLITE_OK,错误则返回错误码
typedef int(*sqlite3_callback)(void *para,int f_num,char **f_value,char **f_name);
功能:每找到一条记录自动执行一次回调函数
参数:para sqlite3_exec传入参数
f_num 记录中包含的字段数目
f_value 包含每个字段值的指针数组
f_name 包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1
5.sqlite3_get_table
int sqlite3_get_table( sqlite3 * db,/ *打开的数据库* / const char * zSql,/ *要求值的SQL * / char *** pazResult,/ *查询结果* / int * pnRow,/ *此处写入的结果行数* / int * pnColumn,/ *此处写入的结果列数* / char ** pzErrmsg / *此处写的错误消息* / );
功能:执行sql操作
参数:db 数据库句柄
zSql 要执行的语句
pazResult 用来指向zSql执行结果的指针
pnRow 结果的行数
pnColumn 结果的列数
pzErrmsg 传出参数,返回错误信息
返回值:成功返回SQLITE_OK,错误则返回错误码
pazResult返回的结果:
![]()
void sqlite3_free_table(char ** result);
功能:释放sqlite3_get_table中pazResult返回的结果
参数:result sqlite3_get_table中的pazResult
四、简单例子
简单实现数据库的增删改查
#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> #define DATEBASE "./student.db" int do_insert(sqlite3 *db) { int id; char name[32]; int score; char sql[128] = {}; char *errmsg; printf("id:"); scanf("%d",&id); getchar(); printf("name:"); scanf("%s",name); getchar(); printf("score:"); scanf("%d",&score); getchar(); sprintf(sql,"insert into stu values(%d,'%s',%d)",id,name,score); if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { printf("insert fail\n"); printf("%s\n",errmsg); return -1; } else { printf("insert success\n"); } return 0; } int do_delete(sqlite3 *db) { int id; char sql[128] = {}; char *errmsg; printf("id:"); scanf("%d",&id); getchar(); sprintf(sql,"delete from stu where id=%d",id); if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { printf("delete fail\n"); printf("%s\n",errmsg); return -1; } else { printf("delete success\n"); } return 0; } int do_update(sqlite3 *db) { int id; int score; char sql[128] = {}; char *errmsg; printf("id:"); scanf("%d",&id); getchar(); printf("score:"); scanf("%d",&score); getchar(); sprintf(sql,"update stu set score=%d where id=%d",score,id); if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { printf("update fail\n"); printf("%s\n",errmsg); return -1; } else { printf("update success\n"); } return 0; } int callback_query(void *param,int f_num,char **f_value,char **f_name) { int i; for(i=0;i<f_num;i++) { printf("%-11s",f_value[i]); } putchar('\n'); return 0; } int do_query(sqlite3 *db) { char *errmsg; if(sqlite3_exec(db,"select * from stu;",callback_query,NULL,&errmsg)!=SQLITE_OK) { printf("query fail\n"); printf("%s\n",errmsg); return -1; } else { printf("query success\n"); } return 0; } int do_query_by_gettable(sqlite3 *db) { char *errmsg; int nrow; int ncloumn; char **resultp; int i,j; int index = 0; if(sqlite3_get_table(db,"select * from stu;",&resultp,&nrow,&ncloumn,&errmsg)!=SQLITE_OK) { printf("get table fail\n"); printf("%s\n",errmsg); return -1; } else { printf("get table success\n"); } //打印字段 for(i=0;i<ncloumn;i++) { printf("%-11s",resultp[i]); } putchar(10); //打印数据 index = ncloumn; for(i=0;i<nrow;i++) { for(j=0;j<ncloumn;j++) { printf("%-11s",resultp[index++]); } putchar(10); } return 0; } int main(int argc,char **argv) { sqlite3 *db; //数据库句柄 char *errmsg; int cmd; if(sqlite3_open(DATEBASE,&db)!=SQLITE_OK) { printf("%s\n",sqlite3_errmsg(db)); return -1; } else { printf("open %s success\n",DATEBASE); } //创建一张数据库表格 if(sqlite3_exec(db,"create table stu (id Integer,name char,score Integer))",NULL,NULL,&errmsg)!=SQLITE_OK) { printf("create table fail\n"); printf("%s\n",errmsg); } else { printf("create or open table success\n"); } while(1) { printf("************************************************\n"); printf("1.insert 2.delete 3.query 4.update 5.quit\n"); printf("************************************************\n"); scanf("%d",&cmd); getchar(); switch(cmd) { case 1: do_insert(db); break; case 2: do_delete(db); break; case 3: //do_query(db); //回调函数方式查询 do_query_by_gettable(db); //gettable函数方式 break; case 4: do_update(db); break; case 5: sqlite3_close(db); exit(1); default: printf("please input corrent cmd\n"); break; } } return 0; }
更多函数使用可以参考官方文档
sqlite3的官方API网站:https://www.sqlite.net.cn/c3ref/funclist.html


浙公网安备 33010602011771号