08.QT中sqlite3数据库基本操作
发布日期:2021-05-15 02:37:29 浏览次数:20 分类:精选文章

本文共 3411 字,大约阅读时间需要 11 分钟。

Qt版本数据库操作指南

1. 创建项目时选择SQL模块

在使用Qt开发时,如果需要进行数据库操作,首先需要在项目配置中选择合适的数据库模块。在这个案例中,我们选择了SQLite作为数据库引擎。SQLite是Qt开发中非常常用的嵌入式数据库,支持多种操作,如插入、删除、更新和查询等。

2. 简易效果图说明

在开发过程中,界面设计也是一个关键环节。以下是一个简易的效果图说明,展示了数据库操作的主要界面。图中包括创建表、插入数据、删除数据、更新数据以及查询数据等功能。

3. 代码说明

以下是与数据库操作相关的代码示例。这些代码用于实现前面提到的各种数据库操作,包括连接数据库、创建表、插入数据、删除数据、更新数据以及查询数据等功能。

代码结构

#include "SqliteDemo.h"
#include
#include
#include
#include
#include
#include
#include

类成员变量

private:
QSqlDatabase db;
QSqlQueryModel model;
QSqlTableView view;
QPushButton *createBtn;
QPushButton *insertBtn;
QPushButton *deleteBtn;
QPushButton *updateBtn;
QPushButton *queryBtn;

初始化方法

SqliteDemo::SqliteDemo(QWidget *parent)
: QMainWindow(parent)
{
ui->setupUi(this);
// 检查数据库是否存在默认连接
if (QSqlDatabase::contains("qt_sql_default_connection")) {
db = QSqlDatabase::database("qt_sql_default_connection");
} else {
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(QApplication::applicationDirPath() + "/config/" + "config.db");
}
// 连接信号槽
connect(ui.createBtn, SIGNAL(clicked()), this, SLOT(createTableSlot()));
connect(ui.insertBtn, SIGNAL(clicked()), this, SLOT(insertBtnSlot()));
connect(ui.deleteBtn, SIGNAL(clicked()), this, SLOT(deleteBtnSlot()));
connect(ui.updateBtn, SIGNAL(clicked()), this, SLOT(updateBtnSlot()));
connect(ui.queryBtn, SIGNAL(clicked()), this, SLOT(queryBtnSlot()));
}

创建表函数

void SqliteDemo::createTableSlot()
{
QSqlQuery sql_query(db);
QString sql = "create table pointInfo(id integer primary key autoincrement , name varchar(30), longitude double, latitude double, altitude double)";
sql_query.prepare(sql);
if (!sql_query.exec()) {
QMessageBox::about(this, "create table", "Failed to create table.");
} else {
QMessageBox::information(this, "create table", "Table created ok!");
}
}

插入数据函数

void SqliteDemo::insertBtnSlot()
{
QSqlQuery sql_query(db);
QString sql = "insert into pointInfo values(?, ?, ?, ?, ?)";
sql_query.prepare(sql);
sql_query.bindValue(1, "start");
sql_query.bindValue(2, 120.12233);
sql_query.bindValue(3, 45.12233);
sql_query.bindValue(4, 5000);
if (!sql_query.exec()) {
QMessageBox::about(this, "insert", "Failed to insert pointInfo.");
} else {
QMessageBox::information(this, "insert", "insert ok!");
}
}

删除数据函数

void SqliteDemo::deleteBtnSlot()
{
QSqlQuery sql_query(db);
QString sql = "delete from pointInfo";
sql_query.prepare(sql);
if (!sql_query.exec()) {
QMessageBox::about(this, "delete", "delete Failed.");
} else {
QMessageBox::information(this, "delete", "删除所有记录");
}
}

查询函数

void SqliteDemo::queryBtnSlot()
{
model->setQuery("SELECT * FROM pointInfo");
model->setHeaderData(0, Qt::Horizontal, "id");
model->setHeaderData(1, Qt::Horizontal, "名称");
model->setHeaderData(2, Qt::Horizontal, "经度");
model->setHeaderData(3, Qt::Horizontal, "纬度");
model->setHeaderData(4, Qt::Horizontal, "高度");
view->setColumnWidth(5, 20);
view->resize(800, 500);
view->setModel(model);
view->show();
}

注意事项

在使用以上代码时,需要注意以下几点:

  • 确保数据库连接成功建立,否则会导致后续操作失败。
  • 在关闭数据库时,记得调用db->close()方法,避免内存泄漏。
  • 如果需要更高效的查询性能,可以考虑使用预编译查询和绑定值的方式。
  • 通过以上步骤,可以轻松实现 Qt版本下的 SQLite 数据库操作,满足开发需求。

    上一篇:09.QT应用程序启动外部exe文件
    下一篇:2001.dumpbin工具使用

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月27日 03时04分11秒