第一步连接数据库 以后修改一下基本通用

static bool createConnection()
{
    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); //加载数据库驱动,类似的还有QODBC, QSQLITE.......
    db.setUserName("root");//用户名
    db.setPassword("chen28");//密码  登入服务器的密码一定要正确,否则打不开
    db.setHostName("localhost");
    db.setDatabaseName("StationHelper");//数据库名 选择想要的数据库
    db.setPort(3306);//端口 默认端口
    if(!db.open())
    {
        qDebug()<<"open failed\n"<<db.lastError().driverText()<<"\n";
        return false;
    }
    else
    {
        qDebug()<<"open database success\n";
    }
    return true;
}

三种数据库模型数据库模型QSqlQueryModel QSqlTableModel QSqlRelationalTableModel

QSqlQueryModel 查询数据库模型 只读
QSqlTableModel 表格数据库模型 可读写
QSqlRelationalTableModel 关系型表格数据库模型 支持外键

1、表格数据库模型QSqlTableModel
实例:对一个学生数据表格进行 插入删除操作

/*main.cpp*/
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

/*mainwindow.cpp*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QMessageBox>
#include <QTextCodec>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));  //解决中文乱码
    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
    db.setUserName("root");//用户名
    db.setPassword("chen28");//密码
    db.setHostName("localhost");
    db.setDatabaseName("test");//数据库名
    db.setPort(3306);//端口
    if(!db.open())
    {
        qDebug()<<"open failed\n"<<db.lastError().driverText()<<"\n";
    }
    else
    {
        qDebug()<<"open database success\n";
    }

    model = new QSqlTableModel(this);  //定义一个表格模型
    model->setTable("table1");             //打开表格
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);  //三种模式之一,见下面解释
    model->select();  //选择所以字段
    ui->tableView->setModel(model);  //ui表格和数据库表格关联
}

MainWindow::~MainWindow()
{
    delete ui;
    delete model;
}
/*插入按钮槽函数*/
void MainWindow::on_insertButton_clicked()
{
    int rowNum = model->rowCount(); //获得表的行数
    model->insertRow(rowNum); //添加一行
    QModelIndex index= model->index(rowNum,1);  //聚焦光标到当前行第1列
    model->setData(index,QString("添加"));  //在光标处设置默认值
}
/*删除按钮槽函数*/
void MainWindow::on_deleteButton_clicked()
{
    QModelIndex index=ui->tableView->currentIndex();
    if(!index.isValid())
    {
        QMessageBox::information(this,QString("提示:"),QString("请选择待删除记录!"));
        return ;
    }

    model->removeRow(index.row());   //删除当前行
}
/*刷新按钮槽函数*/
void MainWindow::on_refreshButton_clicked()
{
    model->select();   //刷新,重新选择所有字段
}
/*提交按钮槽函数*/
void MainWindow::on_submitButton_clicked()
{
    model->submitAll();   //提交
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、关系表格数据库模型QSqlRelationalTableModel
实例

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐