数据库——SQLite使用教程

数据库管理系统是根据数据模型对数据进行存储和管理的系统。

数据库管理系统采用的数据模型主要有:层次模型、网状模型和关系模型。

本文主要介绍SQLite,它是一个开源的、内嵌式的关系型数据库,SQL 是一种专门用来与数据库通信的语言。

操作数据库

在终端输入sqlite3,可进入软件通过输入命令来操控SQL数据库,SQL数据库不区分大小写。

命令 功能
.help 查看所有命令
.databases 查看与数据库关联的文件名
.tables 查看数据表名
.schema 查看表的结构
.headers on/off 打开或关闭显示表头
.mode column 固定列宽

一、SQL语句

1.创建一个数据库

语法:sqlite3 数据文件名(以.db为结尾)。

eg:在终端命令行输入 sqlite3 stu.db,创建一个与数据库关联的文件名。

可用.databases查看数据库路径。

2.创建一张表 create table

语法:create table 表名称(列名称1 数据类型,列名称2 数据类型,... );

存储类 描述
NULL 值是一个 NULL 值。
INTEGER(int) 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
REAL(float、double) 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。
TEXT 值是一个文本字符串,使用数据库编码存储。
BLOB 值是一个 blob 数据,完全根据它的输入存储。

eg:在sqlite3中输入create table stu(name text,age int,score float);

可用.tables命令查看创建的表名,用.schema命令查看表的结构。

3.表内插入数据 insert into

语法:insert into 表名 values (列值1,列值2,... );

功能:给表里一行中的所有列值赋值。

eg:在sqlite3中输入 insert into stu values("zhangsan",18,99.5);

4.查询表内数据 select

语法:1、select * from 表名 【匹配条件】;(*表示选取所有列)

2、select 列名 1[, 列名 2, ...] from 表名 【匹配条件】;

5.匹配条件 where

1). in操作符

语法:where 列名 in (列值 1, 列值 2, ...)

eg :在sqlite3中输入select * from stu where age in (18,19);

2).or操作符

语法:where 列 1 = 值 1 [or 列 2 = 值 2 or ...]

eg :cselect * from stu where score > 90 or age > 19;

3).like操作符

语法:where 列名 like 列值

1、若列值为数字,相当于列名=列值。

2、若列值为字符串,可以用通配符"%"代表缺少的字符(若干个)。

eg :在sqlite3中输入select * from stu where name like '%zhang%';

4).order by排序

select * from 表名 order by 列名; ---- 升序

select * from 表名 order by 列名 desc; ---- 降序

6.修改表的列 alter

在已有的表中添加列以及修改表名。 (删除列-sqlite3 暂不支持)

语句:alter table 表名 add 列名 数据类型;

alter table 表名 rename to 新表名;

eg:在sqlite3中输入alter table stu add sno int;

7.修改表中数据 update

语法:update 表名 set 列1=值1 [, 列2=值2, ...] [匹配条件];

eg :在sqlite3中输入update stu set sno=111 where age==20;

8.删除表中数据 delete

语法: delete from 表名 [匹配条件];

注意: 当表中有多列、多行符合匹配条件时会删除相应的多行。

eg:在sqlite3中输入delete from stu where age==20;

9.删除表 drop

语法:drop table 表名称;

二、C编程

1. 打开数据库

语法:int sqlite3_open( const char *db_name, sqlite3 **db );

功能:打开一个数据库文件 。

参数:

  • @db_name --- 数据库文件名
  • @db --- 获得数据信息在内存的首地址

**返回值:**成功返回SQLITE_OK,失败返回非SQLITE_OK。

2. 关闭数据库

语法:int sqlite3_close( sqlite3 **db );

**功能:**关闭一个数据库文件 。

参数:

  • @db --- 要关闭的数据库操作句柄

**返回值:**成功返回SQLITE_OK,失败返回非SQLITE_OK。

3. 执行SQL语句的函数(回调方式)

语法:int sqlite3_exec(sqlite3 *db, const char *sql,

exechandler_t callback, void *arg, char **errmsg);

功能:执行 sql 指向的 SQL 语句,若结果集不为空,函数会调用函数指针 callback 所指向的函数。

参数

  • @db --- 数据库的标识。
  • @sql --- SQL 语句(一条或多条),以';'结尾。
  • @callback --- 是回调函数指针,当select这条语句执行之后,sqlite3 会去调用你提供的这个函数。 @arg --- 当执行 sqlite3_exec 的时候传递给回调函数的参数。
  • @errmsg --- 记录sqlite3_exec的错误信息 返回值: 成功 SQLITE_OK 失败 非SQLITE_OK

**返回值:**成功返回SQLITE_OK,失败返回非SQLITE_OK。

4. 回调函数

回调函数指针: typedef int callback (void *para, int n_column, char **pvalues, char **pname);

功能: 此函数由用户定义, 当 sqlite3_exec 函数执行 sql 语句后,结果集不为空时 sqlite3_exec 函数会自动调用此函数, 每次调用此函数时会把结果集的一行信息传给此函数。

参数

  • @para --- sqlite3_exec 传给此函数的参数,para 为任意数据类型的地址。
  • @n_column --- 结果集的列数。
  • @pvalue --- 指针数组的地址,其存放一行信息中各个列值的首地址。
  • @pname --- 指针数组的地址,其存放一行信息中各个列值对应列名的首地址。

返回值: 若为非 0 值,则通知 sqlite3_exec 终止回调。

5. 执行SQL语句的函数(非回调方式)

语法: int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg );

功能: 执行 sql 指向的 SQL 语句,函数将结果集相关的数据的地址保存在函数的参数中。

参数

  • @db --- 数据库的标识。
  • @sq --- SQL 语句(一条或多条),以';'结尾。
  • @resultp --- 指针数组的地址, 指针数组的地址, 其记录了结果集的数据。 内存布局: 先依次存放各列的列名, 然后是每一行各列的值。 //char **
  • @nrow --- 结果集的行数(不包含列名)。
  • @ncolumn --- 结果集的列数。
  • @errmsg --- 错误信息。

6. 释放resultp函数

语法:void sqlite3_free_table(char **resultp);

功能: 释放 sqlite3_get_table 分配的内存。

参数: 结果集数据的首地址。

相关推荐
yuweiade2 小时前
Redis服务安装自启动(Windows版)
数据库·windows·redis
执笔画情ora2 小时前
PG数据库管理-体系结构
数据库
tant1an2 小时前
Spring Boot 基础入门:从核心配置到 SSMP 整合实战
java·数据库·spring boot·sql·spring
hjxu20163 小时前
【 MySQL 速记5】插入
android·数据库·mysql
一个处女座的程序猿O(∩_∩)O3 小时前
性能调优实战:金仓数据库连接条件下推原理与案例拆解
数据库·oracle
数据知道4 小时前
MongoDB认证机制实战:详细讲述SCRAM-SHA与X.509证书认证配置
数据库·mongodb
雷工笔记4 小时前
KingFusion 关系库查询核心:SQLQuery 与 AsynSQLQuery 函数全解析
数据库
zopple4 小时前
Knife4j文档请求异常(基于SpringBoot3,查找原因并解决)
java·服务器·数据库
执笔为剑4 小时前
docker环境升级数据库
数据库·docker·容器