QT-操作数据库命令(小白学习分享)

QT-操作数据库命令(小白学习分享)

1.SQL说明

对于数据库,可能大家都是既熟悉,又陌生,平时也使用QT来操作数据库,但是大部分都在网上查询,然后进行复制下来,供自己使用,对于深入的原理,不是很明白。

下面将自己学习的步骤进行分享,希望对大家有些许帮助。

头文件

#include <QSqlDatabase>
#include <QSqlTableModel>
#include <QSqlQuery>
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>

1.创建一个简单的项目,在main函数中创建一个简单的.db文件

代码:main.cpp.

#include "mainwindow.h"
#include <QApplication>

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QMessageBox>
#include "queryform.h"

bool initSQLData()
{
    QSqlDatabase m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName("test.db");

    if(!m_db.open())
    {
        QMessageBox::critical(nullptr,"error","sql is not open");
        return false;
    }
    QSqlQuery query;
    //创建一个表 person
    query.exec("create table person("
               "id int primary key,"
               "firstname varchar(20),"
               "lastname varchar(20)) ");

    /****向table表中添加数据 *****/
    //语法1:插入数据
    query.exec("insert into person values(1,'合肥市','皖') ");

    //语法2:插入数据
    query.prepare("insert into person (id , firstname, lastname) "
                  "values(:id, :firstname, :lastname) ");
    query.bindValue(":id",2);
    query.bindValue(":firstname","济南");
    query.bindValue(":lastname","鲁");
    query.exec();

    //语法3:插入数据 使用命名占位符的[位置]绑定
    query.prepare("insert into person (id , firstname, lastname) "
                  "values(:id, :firstname, :lastname) ");
    query.bindValue(0,3);
    query.bindValue(1,"郑州");
    query.bindValue(2,"豫");
    query.exec();

    //语法4:使用位置占位符绑定值(版本 1)
    query.prepare("insert into person (id , firstname, lastname) "
                  "values(?, ?, ?) ");
    query.bindValue(0,4);
    query.bindValue(1,"南京");
    query.bindValue(2,"苏");
    query.exec();

    //语法5:使用位置占位符绑定值(版本 2)
    query.prepare("insert into person (id , firstname, lastname) "
                  "values(?, ?, ?) ");
    query.addBindValue(5);
    query.addBindValue("杭州");
    query.addBindValue("浙");
    query.exec();

    return true;
}


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    if(!initSQLData())  return -1;

    MainWindow w;
    w.show();

    return a.exec();
}

2.在Mainwindow中绘制显示数据库文件的UI界面。

界面

3.在mainwindow中读取数据库,以及对应的保存、还原、退出操作。

代码:Mainwindow.cpp.


#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setWindowTitle("数据库-数据操作指令");

    tableSQL = new QSqlTableModel(this);
    tableSQL->setTable("person");         // 设置需要操作的表
    tableSQL->setEditStrategy(QSqlTableModel::OnManualSubmit);  // 设置数据不自动保存到数据库表
    tableSQL->select();                   // 查询表中所有数据

    qDebug()<<"======is:"<<tableSQL->select();

    ui->tableView->setModel(tableSQL);
    ui->tableView->resizeColumnsToContents();   // 根据表格中的内容自动调整列宽
}

MainWindow::~MainWindow()
{
    delete ui;
}

/**
 * @brief 开启sqlite事务并提交修改,相对于直接使用submitAll更有优势(开始事务可以优化写入大量数据速度)
 */
void MainWindow::on_btnSave_clicked()
{
    bool ret  = tableSQL->database().transaction();
    if(!ret)
        return;

    if(tableSQL->submitAll())   //提交所有修改,如果开启了事务,则保存事务
    {
        tableSQL->database().commit();
        QMessageBox::information(this,"information"," save is success!");
    }
    else
    {
        tableSQL->database().rollback();
        QMessageBox::warning(this, "错误!", QString("数据提交错误:%1").arg(tableSQL->lastError().text()));
    }
}

/**
 * @brief 还原未提交的修改
 */
void MainWindow::on_btnResize_clicked()
{
    tableSQL->revertAll();
}

/**
 * @brief 退出修改
 */
void MainWindow::on_btnQuit_clicked()
{
    this->close();
}

4.编译后运行界面

运行界面

5.结尾

详细代码已在文中展示。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值