1.sqlite3的使用
1.打开数据库
sqlite3 stu.db //database
2.操作
输入 sqlite3,进入软件后,输入 sqlite3 软件自带的命令(.help,.databases,·quit,.exit)
3.增删改查
增
CREATE TABLE database_name.table_name( column1 datatype PRIMARY KEY(one or more columns), column2 datatype, column3 datatype, ..... columnN datatype, ); 例子: create table stu(name, sex, age, score); create table stu1(name text, sex text, age int, score real); 创建一张表 验证: .table //可以看到表的名字 .schema//可以看到表的字段
//往表中添加信息 插入一条记录 语法: INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN); //全部列都给到 insert into stu values("tom", "male", 19, 88.5); insert into stu1 values("ousca", "fmale", 18, 98.5); //给一部分列插入数据 insert into stu1(name, sex) values("jack", "male");
注意:sql语句后面必须以分号结尾
删
删除表中的数据 DELETE FROM table_name WHERE [condition]; delete from 表名 where 条件; 删除表 DROP TABLE database_name.table_name; drop table 表名;
改
添加字段 ALTER TABLE database_name.table_name RENAME TO new_table_name; alter table 表名 add 列名; 例子: alter table stu add stuno; name sex age score stuno ---------- ---------- ---------- ---------- ---------- ousca fmale 18 98.5 tom male 19 88.5
修改表的数据 UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition]; update 表名 set 列1=值1 [,列2=值2,...][匹配条件]; 条件语句: where 字句 where 列名 操作符 列值 where age > 10 update stu set stuno=110 where name="ousca" name sex age score stuno ---------- ---------- ---------- ---------- ---------- ousca female 18 98.5 110 tom male 19 88.5 111
查
//查询 SELECT column1, column2, columnN FROM table_name; select 列名1, 列名2,... from 表名; select * from 表名;//查看表的所有信息 sqlite3命令: .headers on //打开表头 .mode column //指定查询的输出格式, column是以列对齐的方式 name sex age score ---------- ---------- ---------- ---------- ousca female 18 98.5 tom male 19 88.5
查询: 1.查询部分字段 select name from stu where score>80; 2.in语句 selectt * from stu where age in(18,19); 3.and语句//多个条件 select * from stu where age >18 and score > 80; 4.or语句 select * from stu where age > 18 or score > 80; 5.范围between...and ... select * from stu where age between 19 and 20; 6. like select * from stu where name like "tom"; select*from stuwhere name 1ike"&tom&";//%表示匹配任意多个字符 select * from stu where name like "_tom_";表示匹配任意一个字符
4.补充
//插入时间信息 create table user1(id int,name char,age int,dt datetime); eg: insert into user1 values (1,'张三',18,datetime('now','+8 hours')); //utc id name age dt ---------- ---------- ---------- ------------------- 1 张三 18 2025-08-29 15:38:02
//自动增长列 create table user5 (id INTEGER PRIMARY KEY ASC,name char, age int); PRIMARY KEY//主键 ASC//自动增长的顺序 //int需要写成INTEGER才能实现自动增长 create table user4 (id int PRIMARY KEY ASC,name char, age int) ; id name age dt ---------- ---------- ---------- ------------------- 1 李四 21 2025-08-29 15:48:10 2 王二 22 2025-08-29 15:48:21 3 张三 25 2025-08-29 15:48:34
2.函数学习
类似于文件操作 ---- stu.db (单独的数据库文件)
1.打开
#include <sqlite3.h> int sqlite3_open(char *db_name,sqlite3 **db); 功能: 打开数据库。 参数: @db_name:数据库文件名,若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码。 @db:数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作。 返回值: 成功返回 SQLITE_OK 失败返回 非SQLITE_OK
2.sql语句
sqlite3_exec 函数: 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:存放错误信息的地址,执行失败后可以查阅这个指针。 返回值: 成功返回SQLITE_OK, 失败返回 非SQLITE_OK。 打印错误信息方法: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终止回调。
3.关闭
int sqlite3_close(sqlite3 *db); 功能: 关闭数据库、释放打开数据库时申请的资源。 参数: db:数据库的标识。 返回值: 成功返回 SQLITE_OK。 失败返回 非 SQLITE_OK。