01 QSqlDatabase介绍
QSqlDatabase是用于管理数据库连接的一个类。它提供了一种方便的方式来连接到各种数据库,包括SQLite、MySQL、PostgreSQL等。QSqlDatabase允许你设置数据库连接参数、执行SQL查询、处理结果集等。
02 SQLite数据库介绍
SQLite 是一个轻量级的数据库系统,它不是一个服务器进程或守护进程,而是一个单个跨平台的磁盘文件,包含一个完整的数据库。它作为应用程序的库提供,允许应用程序使用 SQL 语言来创建、修改和管理数据库文件。
SQLite数据库文件扩展名一般是(.db)。
03 QSqlDatabase访问SQLite数据库
- 连接或创建一个SQLite数据库:
/**** 例子: ****/
#include <QSqlDatabase>
// 添加 SQLite 数据库驱动。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 设置数据库路径。
db.setDatabaseName("sqlite_demo.db");
// 打开数据库,数据库文件存在则连接,不存在则创建。
db.open();
- 创建表:
示例说明:创建一张简单的表(t_test),包含f_id, f_name, f_description 三个字段。
/**** 例子: ****/
#include <QSqlQuery>
// 创建一张简单的表(t_test),包含f_id, f_name, f_description 三个字段。
QSqlQuery query(db);
query.exec("CREATE TABLE t_test (f_id INTEGER PRIMARY KEY, f_name VARCHAR(32), f_description TEXT);");
- 插入表记录:
/**** 例子: ****/
#include <QSqlQuery>
// 插入三条记录。
QSqlQuery query(db);
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (1, 'C++', '20YC编程');");
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (2, 'QT', '20YC编程');");
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (3, 'MFC', '20YC编程');");
- 删除表记录:
/**** 例子: ****/
#include <QSqlQuery>
// 删除 f_id=3 记录。
QSqlQuery query(db);
query.exec("DELETE FROM t_test WHERE f_id=3;");
- 遍历表记录:
示例说明:列出表所有记录数据。
/**** 例子: ****/
#include <QSqlQuery>
// 遍历表所有记录数据。
QSqlQuery query(db);
query.exec("SELECT * FROM t_test");
while (query.next())
{
int id = query.value(0).toInt();
QString name = query.value(1).toString();
QString description = query.value(2).toString();
}
- 关闭数据库:
// 访问函数。
void close()
/**** 例子: ****/
db.setDatabaseName("sqlite_demo.db");
//...
db.close();
04 内存数据库
QSqlDatabase支持使用内存数据库,不需要创建数据库文件。内存数据库创建示例如下:
/**** 例子: ****/
#include <QSqlDatabase>
// 添加 SQLite 数据库驱动。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 设置使用内存数据库。
db.setDatabaseName(":memory:");
// 打开内存数据库。
db.open();
05 QSqlDatabase访问SQLite数据库完整示例
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 添加 SQLite 数据库驱动。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 设置数据库路径。
db.setDatabaseName("./sqlite_demo.db");
// 打开数据库,数据库文件存在则连接,不存在则创建。
if (!db.open()) {
qDebug() << "SQLite数据库打开失败。";
return -1;
}
else {
qDebug() << "成功打开SQLite数据库。";
}
// 创建一张简单的表(t_test),包含f_id, f_name, f_description 三个字段。
QSqlQuery query(db);
if (query.exec("CREATE TABLE t_test (f_id INTEGER PRIMARY KEY, f_name VARCHAR(32), f_description TEXT);")) {
qDebug() << "表创建成功。";
}
else {
qDebug() << "表创建失败。";
}
// 插入三条记录。
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (1, 'C++', '20YC编程');");
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (2, 'QT', '20YC编程');");
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (3, 'MFC', '20YC编程');");
// 删除 f_id=3 记录。
query.exec("DELETE FROM t_test WHERE f_id=3;");
// 遍历数据表所有记录。
query.exec("SELECT * FROM t_test");
while (query.next()) {
int id = query.value(0).toInt();
QString name = query.value(1).toString();
QString description = query.value(2).toString();
qDebug() << "ID: " << id << ", Name: " << name << ", Description: " << description;
}
return 0;
}
运行这个程序将创建一个名为"sqlite_demo.db"的SQLite数据库文件。
06 附录:完整源码
关注公众号下载本示例完整源码(19_QSqlDatabase_example.zip)。
-【End】-
#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。
喜欢本文章,记得点赞、分享、关注哦~