Linux学习——sqlite3
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 > 10update 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')); //utcid 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。