Linux学习——sqlite3

发布于:2025-08-30 ⋅ 阅读:(22) ⋅ 点赞:(0)

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。