本文最后更新于:2022年5月29日 上午
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
前言
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。
SQLite(sql)是一款开源轻量级的数据库软件,不需要server,QT自带SQLite数据库,不需要再安装。
用法
Step1: 准备
引入SQL模块
在Qt项目文件(.pro文件)中,加入SQL模块:
引用头文件
在需要使用SQL的类定义中,引用相关头文件。例如:
1 2 3
| #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError>
|
Step2: 使用
指令方式
例程下载
提取码: seh9
1. 建立数据库
1 2 3 4
| QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("demo.db");
|
addDatabase()
的参数QSQLITE
是SQLite对应的驱动名。
setDatabaseName()
的参数是数据库文件名。
2. 打开数据库
使用open()
打开数据库,并判断是否成功。
1 2 3 4 5
| if(!db.open()) { QMessageBox::critical(NULL,"Database Error",db.lastError().text()); return ; }
|
3. 关闭数据库
数据库操作完成后,最好关闭。
4. 操作数据库
对数据库进行操作需要用到QSqlQuery类,操作前必须定义一个对象。下面举例说明操作方法。操作需要使用SQLite语句,本文中的几个例子会使用几个常用的语句,关于SQLite语句的具体信息请参考SQLite相关资料。
例1:创建表格
创建一个名为user
的表格,表格包含两列,第一列是名字,第二列是密码信息。
1 2 3 4
| QSqlQuery query; if(!query.exec("CREATE TABLE user (name VARCHAR(255), password VARCHAR(255))")) { QMessageBox::critical(NULL,"Database Error",query.lastError().text()); }
|
注意 :只能创建一个同名的表格,否则会报错。
例2:插入数据
在刚才创建的表格中,插入一行数据。
1 2 3 4 5 6 7 8 9 10 11 12
| query.prepare("INSERT INTO user (name, password) VALUES (?, ?)");
QVariantList names; names << "Admin" << "Tom" << "Kane" << "Jerry"; query.addBindValue(names); QVariantList passwords; passwords << "admin" << "87654321" << "20211204" << "12345678"; query.addBindValue(passwords);
if(!query.execBatch()) { QMessageBox::critical(NULL,"Database Error",query.lastError().text()); }
|
例4:查询数据
1 2 3 4 5 6 7
| query.exec("SELECT name, password FROM user"); while (query.next()) {
qDebug() << query.value("name").toString() << query.value("password").toString(); }
|
界面模型操作方式
主要使用QSqlTableModel
和界面控件tableView
来实现数据库的界面操作使用,如下图。
例程下载
提取码: fsjb
1. 建立数据库
1 2 3 4
| QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("demo.db");
|
addDatabase()
的参数QSQLITE
是SQLite对应的驱动名。
setDatabaseName()
的参数是数据库文件名,如果运行目录下没有该数据库文件demo.db
请先手动创建。
2. 打开数据库
使用open()
打开数据库,并判断是否成功。
1 2 3 4 5
| if(!db.open()) { QMessageBox::critical(NULL,"错误",db.lastError().text()); return ; }
|
3. 操作数据库
把数据库设置显示在界面上
1 2 3 4 5 6 7 8 9 10
| model = new QSqlTableModel(this); model->setTable("user"); ui->tableView->setModel(model); model->select();
model->setHeaderData(0, Qt::Horizontal, "用户"); model->setHeaderData(1, Qt::Horizontal, "密码");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
|
添加操作
1 2 3 4 5
| QSqlRecord record = model->record();
int row = model->rowCount(); model->insertRecord(row, record);
|
**删除操作 **
1 2 3 4 5 6 7 8
| QItemSelectionModel *sModel = ui->tableView->selectionModel();
QModelIndexList list = sModel->selectedRows();
for(int i = 0; i < list.size(); i++) { model->removeRow( list.at(i).row() ); }
|
取消操作
1 2
| model->revertAll(); model->submitAll()
|
查找
1 2 3 4
| QString name = ui->lineEditName->text(); QString str = QString("name = '%1'").arg(name); model->setFilter(str); model->select();
|