在 QT5 中使用 SQLITE
来源:互联网 发布:淘宝助理可以编辑什么 编辑:程序博客网 时间:2024/05/21 16:23
在我最近一直在做的有关 Kindle 批注管理软件的项目中,对于数据库我是用的是 SQLITE,在这篇文章中我会介绍一下 SQLITE 数据库,以及如何在 QT5 中使用它。
SQLITE 简介
WHAT IS SQLITE?
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
(来自百度百科)
WHY SQLITE?
从 SQLITE 的用途来看,它是一款轻量级的数据库,并且一开始是设计给嵌入式设备的,我们知道 QT 其实现在也是在嵌入式方向应用的比较广泛,因此 QT 内置有 SQLITE 数据库的模块,因此我们能够比较容易上手。并且对于该项目使用文件形式的数据库更加灵活和轻便,更加符合这个项目的需求。
在 QT 中使用 SQLITE
0x00 修改 .pro 文件
为了能使用 SQLITE 我们必须在 QT 工程中的 .pro
文件中加入:
QT += core gui sql
0x01 查看 QT 支持哪些数据库
我们可以通过 QSqlDatabase::drivers()
方法来获取当前的 sql 模快中支持哪些数据库,以我的 QT5 为例:
qDebug() << QSqlDatabase::drivers();
执行结果为:
("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
我们可以看到当前的 QT 是包含有 SQLITE 驱动的。
0x02 创建一个数据库连接
我们来编写一个 connect()
函数:
bool connect(const QString &dbName){ QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(dbName); if (!db.open()) { qDebug() << "Database Error!"; return false; } return true;}
使用这个函数我们可以创建一个名称为 dbName
的 SQLITE 数据库。我们在 main
函数中测试一下:
if(connect("test.db")){ qDebug() << "Database Create Sucessfully!"; } else{ qDebug() << "Database Create Failed!"; }
我们会看到在工程编译后的目录中生成了一个 test.db
文件,并且控制台输出了:
Database Create Sucessfully!
0x03 使用 SQL 语句
在 QT 中我们通过一个QSqlQuery实例执行 SQL 语句:
QSqlQuery query;
创建表
我们创建一个名叫 student
的表,包含三列id
, name
, age
:
if (!query.exec("CREATE TABLE student (" "id INTEGER PRIMARY KEY AUTOINCREMENT," "name VARCHAR," "age INT)")) { qDebug() << "Create Table Failed!"; }
插入条目
我们可以直接使用 query.exec()
来执行 INSERT
语句:
if(!query.exec("INSERT INTO student (name, age) VALUES (\"TOM\", 10)")){ qDebug() << "INSERT Failed!"; }
也可以使用下面的形式来一次添加多个条目:
query.prepare("INSERT INTO student (name, age) VALUES (?, ?)"); QVariantList names; names << "Tom" << "Jack" << "Jane" << "Jerry"; query.addBindValue(names); QVariantList ages; ages << 20 << 23 << 22 << 25; query.addBindValue(ages); if (!query.execBatch()) { qDebug() << "INSERT Failed!"; } query.finish();
其它的语句都可以采用上面类似的方法进行实现,这里不再赘述。
这次我们使用 SQL 语句完成了对数据库的常规操作,包括简单的 CREATE、INSERT 等语句的使用。其实,Qt 不仅提供了这种使用 SQL 语句的方式,还提供了一种基于模型的更高级的处理方式。这种基于QSqlTableModel 的模型处理更为高级,如果对 SQL 语句不熟悉,并且不需要很多复杂的查询,这种QSqlTableModel模型基本可以满足一般的需求,以后我会介绍QSqlTableModel的一般使用。
本文的版权归作者 罗远航 所有,采用 Attribution-NonCommercial 3.0 License。任何人可以进行转载、分享,但不可在未经允许的情况下用于商业用途;转载请注明出处。感谢配合!
- 在 QT5 中使用 SQLITE
- 数据库SQLite在Qt5+VS2012使用规则总结---中文乱码
- 在.net中使用SQLite
- 在.net中使用sqlite
- 在 WPF 中使用 SQLite
- 在SQLite中使用事务
- 在SQLite中使用事务
- 在python中使用SQLite
- 在WP8 中使用SQLite
- 在C#中使用SQLite
- 在SQLite中使用事务
- 在SQLite中使用事务
- 在MFC中使用SQLite
- 在SQLite中使用事务
- 在 SQLite 中使用 CSV
- 在.NET中利用SQLite ADO.NET使用SQLite数据库
- 利用SQLite ADO.NET在C#中使用SQLite
- 在.NET C#中使用sqlite
- 剑指offer-第一次只出现一次的字符位置
- unity的input鼠标
- 关于android 的org.json类JsonObject解析值为null的出现的问题
- 37.Oracle深度学习笔记——RAC的相关等待事件
- (一)分布式微信公众平台框架--架构
- 在 QT5 中使用 SQLITE
- IDEA & Maven & Spring & MyBatis 编写数据服务
- JQuery中$.ajax()方法参数详解
- 闭关日记 Day02
- Android Studio安装JDK环境配置
- domino数据同步到sql server
- Android中app之间的交互(使用Action)
- java开发_图片截取
- springMVC+maven+mybatis+Intellij IDEA环境搭建