Qt数据库
目录
- 数据库简介
- SQLite数据库
- SQLite主要特性
- SQLite的操作指令
- SQLite命令行程序(SQL语句)
- 在Qt中使用SQLite
数据库简介
- 数据库是指以一定方式存储在一起,能为多个用户共享,具有尽可能小的冗余特性,是与应用程序彼此独立的数据集合。
- 相关术语
- DB 数据库(database)
- DBMS 数据库管理系统
- DBA 数据库管理员
- RDB 关系型数据库
- 数据库操作语言
- SQL(Structured Query Language)是一种针对数据库的结构化查询语言,用于实现数据库查询和程序设计,常用于关系数据库系统,实现数据存取、查询、更新等操作。
- 常用的SQL语句
- 数据操作语言(DML):SELECT、INSERT、DELETE、UPDATE
- 数据定义语言(DDL):CREATE TABLE
SQLite数据库
- SQLite是一个轻量级的开源数据库,源代码安全公开不受版权限制,实现了自给自足的、无服务器、零配置的SQL数据库引擎,也是广泛使用的关系型数据库。
- SQLite引擎不是程序与之通信的独立进程,而是以静态库或共享库的方式连接到程序中,其不同于客户-服务器 数据库连接方式,主要的使用方法是在编程语言内直接API调用。当前主流的编程语言,如C/C++、java、python等都提供了sqlite操作的API接口。
- SQLite在资源消耗、实时性和可操作性有着出色的表现,整个数据库(定义、表、索引、数据库本身)都在宿主主机上存储在一个单一的文件中,通常SQLite的工作是在开始一个事务的时候锁定整个数据文件而实现。
SQLite主要特性
- SQLite不需要一个单独的服务器进程或操作的系统(无服务器的)
- SQLite可以不用配置,安装或管理十分简单
- SQLite数据库是存储在一个单一的跨平台的磁盘文件
- SQLite是非常小的、轻量级的,完全配置时小于400KiB,省略可选功能配置时小于250KiB
- SQLite是自给自足的,开发者不需要任何外部的依赖
- SQLite支持SQL92标准的大多数查询语言的功能
- SQLite事务是完全兼容ACID的,允许从多个进程或线程安全访问
SQLite的操作指令
- 进入SQLite的命令行界面后,可以输入两种指令,一种是自身配置和格式控制相关指令,以“.”开头;另外一种指令是sql语句,实现对数据库的增删改查等操作,这些指令以“;”结束
- .database // 查看数据库的名字和对应的文件名
- .table // 查看数据表的名字
- .schema // 查看数据表创建时信息
- .mode // 设置显示模式,如tab/column/list/csv/…,推荐前两个
- .nullvalue // 设置空白字段显示的字符串
- .header on/off // 显示/关闭 数据表的表头
- 输入.help或.h可以获取以“.”开头指令的帮助信息
- 输入.exit或.quit退出SQLite的命令界面,回到系统的控制终端
- 若需要清屏,可使用“Ctrl + L”
SQLite命令行程序(SQL语句)
- 创建数据表
CREATE TABLE 表名(列名1 类型[约束], 列名2 类型[约束],...);
常用的类型:INT(整型)、TEXT(字符串)、REAL(浮点数)
常用的约束:- PRIMARY KEY(主键):表示该列数据唯一,可以加快数据访问
- NOT NULL(非空):该列数据不能为空
- 删除数据表
DROP TABLE 表名;
,慎用,数据表一旦删除,里面数据也随之消失。 - 向数据表插入数据
INSERT INTO 表名(列名1, 列名2, ...) VALUES(数值1, 数值2, ...);
若要为表中的所有列添加值,并且插入列的顺序和创建表的顺序相同,可以不指定列名。
INSERT INTO 表名 VALUES(数值1, 数值2, ...);
- 从数据表删除数据
DELETE FROM 表名 WHERE 条件表达式;
可以没有WHERE子句,此时数据表中的所有数据都将被删除。若有多个条件语句,可以使用逻辑与(and)或逻辑或(or)连接。 - 修改数据表中的数据
UPDATE 表名 SET 列名1 = 新数值, 列名2 = 新数值, ... WHERE 条件表达式;
可以没有WHERE子句,此时数据表中的所有数据都将被修改;“新数值”可以是一个常数,也可以是一个表达式。 - 查询数据表中的数据
SELECT 列名1, 列名2, ... FROM 表名;
SELECT 列名1, 列名2, ... FROM 表名 WHERE 条件表达式;
SELECT 列名1, 列名2,... FROM 表名 WHERE 条件表达式 ORDER BY 列名 排序方式;
ORDER BY子句可以和WHERE子句配合使用,也可以独立使用。
排序方式 :ASC(升序排列)、DESC(降序排列)。 - 模糊查询
SELECT 列名1, 列名2, ... FROM 表名 WHERE 列名 LIKE 模糊匹配条件;
ORDER BY子句可以和WHERE子句配合使用,也可以独立使用。- 模糊匹配通配符,可以组合使用
- 百分号(%):代表零个、一个或多个数字或字符
- 下划线(_):代表一个单一的数字或字符
- 模糊匹配通配符,可以组合使用
在Qt中使用SQLite
- QSqlDatabase建立Qt应用程序和数据库连接
// 添加数据库驱动
db = QSqlDatabase::addDatabase("QSQLITE");
// 设置数据库名字
db.setDatabaseName("xxx.db");
// 打开数据库
db.open();
使用Qt数据库模块需要在工程文件中添加"QT += sql"
- QSqlQuery执行数据库操作的SQL语句
QSqlQuery query;
query.exec("SELECT、DELETE、INSERT、UPDATE等SQL语句");
- QSqlQueryModel获取结果集
QString str = QString("SELECT * FROM 表名");
QSqlQueryModel* model = new QSqlQueryModel;
model->setQuery(str); // 执行查询操作,并将结果集保存到model对象中
ui->menuTableView->setModel(model); // 显示查询结果
参考:达内教育QT图形框架