QT 连接MySQL实现分页

前言:

转载请附上连接,本帖原创请勿照抄。

QT连接MySQL实现分页目录

1. .h文件

2. 构造函数初始化

3. 连接数据库&初始化连接

4. 上一页

5. 下一页

6. 其他问题


    使用QT实现了连接MySQL进行分页,每一页三条记录。

1. .h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QHeaderView>
#include <QStandardItemModel>

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QTextCodec>
#include <qDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QSqlDatabase db;

    QSqlQuery query;

    //NumInt 总页数 NextInt 下一页 PreviousInt 上一页
    int NumInt=0,NextInt=0,PreviousInt=0,ParaInt=0;;


    /* 创建数据模型 */
    QStandardItemModel* model = new QStandardItemModel();
private slots:
    void connect_mysql();

    void Number();

    void Paging();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

2. 构造函数初始化

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    /* 创建数据模型 */
    QStandardItemModel* model = new QStandardItemModel();

    /* 设置表格标题行(输入数据为QStringList类型) */
    model->setHorizontalHeaderLabels({"ID", "User Name", "City", "Classify", "Score", "Sign"});

    /* 自适应所有列,让它布满空间 */
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    /* 加载共10行数据,并每行有6列数据 */
    for (int i = 0; i < 12; i++) {
        model->setItem(i, 0, new QStandardItem(QString("")));
        model->setItem(i, 1, new QStandardItem(QString("")));
        model->setItem(i, 2, new QStandardItem(""));
        model->setItem(i, 3, new QStandardItem(""));
        model->setItem(i, 4, new QStandardItem(""));
        model->setItem(i, 5, new QStandardItem(""));
    }

    /* 设置表格视图数据 */
    ui->tableView->setModel(model);

    /* 显示 */
    ui->tableView->show();
    connect_mysql();
    Paging();
    Number();

}

3. 连接数据库&初始化连接

void MainWindow::connect_mysql()
{
    db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("localhost");

    db.setPort(3306);

    db.setDatabaseName("mysql");

    db.setUserName("root");

    db.setPassword("root");

    if (!db.open()) {

        qDebug("Sql connect failed.");

        qDebug() << db.lastError().text();

    } else {

        qDebug("Sql connected.");

    }
    //关闭数据库
    //db.close();

}


//初始化数量部分
void MainWindow::Number()
{
    query=QSqlQuery(db);
    //NumInt=0,NextInt=0,PreviousInt=0
    QString sq="SELECT COUNT(*) FROM db_mysql;";
    query.exec(sq);

    while(query.next())//遍历数据库
    {
        //取出当前行
        NumInt=query.value(0).toInt();

    }
    float num = NumInt;
    num = num / 3;
    QString str = QString::number(num, 'f', 1);

    if(str.length()==1){
       NumInt = NumInt / 3;
       NextInt=1;
       PreviousInt=NumInt;
    }else{
       NumInt = NumInt / 3 + 1;
       NextInt=1;
       PreviousInt=NumInt;
    }
    ui->lineEdit->setText(QString::number(NextInt));
    ui->lineEdit_2->setText(QString::number(PreviousInt));

    ui->lineEdit->setEnabled(false);
    ui->lineEdit_2->setEnabled(false);
    ui->pushButton_5->setEnabled(false);
    if(PreviousInt==1){
        ui->pushButton_6->setEnabled(false);
     }
}

//初始化查询代码
void MainWindow::Paging()
{

    QString qslname;

    query=QSqlQuery(db);
    QString sq="";
    // 使数据库支持中文
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

    //添加数据
    //sq="INSERT INTO db_mysql VALUES(0,'SY2020111918', 123, '张三', 60, 0)";
    //删除数据
    //sq="DELETE FROM db_mysql WHERE M_AID = 'SY2020111917'";

    //修改数据
    //sq="UPDATE db_mysql SET M_NAME = '尊老爱幼' WHERE M_NAME = 'aa'";

    // 查询数据
    sq="SELECT * FROM db_mysql ORDER BY M_AID LIMIT 0,3";

    if (query.exec(sq)) {

        //qDebug("Sql connected.");
        //qDebug("添加成功");
        //qDebug("删除成功");
        //qDebug("修改成功");
        qDebug("查询成功");
    } else {

        //qDebug("Sql connect failed.");
        //qDebug("添加失败");
        //qDebug("删除失败");
        //qDebug("修改失败");
        qDebug("查询成功");
    }
    /* 设置表格标题行(输入数据为QStringList类型) */
    model->setHorizontalHeaderLabels({"KEY_ID", "M_ID", "PassWord", "Name", "Age", "Sex"});
    QList< QString > qstrList[200];
    int lint=0,fint=0;
    QString str="";
    while (query.next()) {

        qstrList[lint++].append(QString::number(query.value(0).toInt()));
        qstrList[lint++].append(query.value(1).toString());
        qstrList[lint++].append(QString::number(query.value(2).toInt()));
        qstrList[lint++].append(query.value(3).toString());
        qstrList[lint++].append(QString::number(query.value(4).toInt()));
        qstrList[lint++].append(QString::number(query.value(5).toInt()));
    }
    lint=0;
    for (int i = 0; i < 13; i++) {

        model->setItem(i,0,new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 1, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 2, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 3, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 4, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 5, new QStandardItem(qstrList[lint++].join("")));
    }

    /* 设置表格视图数据 */
    ui->tableView->setModel(model);

    /* 显示 */
    ui->tableView->show();
}

4. 上一页

//上一页
void MainWindow::on_pushButton_5_clicked()
{
    query=QSqlQuery(db);
    QString sq="";
    // 使数据库支持中文
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));NextInt--;
    ParaInt = NextInt * 3;

    ui->lineEdit->setText(QString::number(NextInt));
    ui->pushButton_6->setEnabled(true);
    if(NextInt == 1) {
        ui->pushButton_5->setEnabled(false);
    }

    // 查询数据
    sq="SELECT * FROM db_mysql ORDER BY M_AID LIMIT "+QString::number(ParaInt)+",3";

    if (query.exec(sq)) {
        qDebug("查询成功");
    } else {
        qDebug("查询失败");
    }
    /* 设置表格标题行(输入数据为QStringList类型) */
    model->setHorizontalHeaderLabels({"KEY_ID", "M_ID", "PassWord", "Name", "Age", "Sex"});
    QList< QString > qstrList[200];
    int lint=0,fint=0;
    QString str="";
    while (query.next()) {

        qstrList[lint++].append(QString::number(query.value(0).toInt()));
        qstrList[lint++].append(query.value(1).toString());
        qstrList[lint++].append(QString::number(query.value(2).toInt()));
        qstrList[lint++].append(query.value(3).toString());
        qstrList[lint++].append(QString::number(query.value(4).toInt()));
        qstrList[lint++].append(QString::number(query.value(5).toInt()));
    }
    lint=0;
    for (int i = 0; i < 13; i++) {

        model->setItem(i,0,new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 1, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 2, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 3, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 4, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 5, new QStandardItem(qstrList[lint++].join("")));
    }

    /* 设置表格视图数据 */
    ui->tableView->setModel(model);

    /* 显示 */
    ui->tableView->show();
}

5. 下一页

//下一页
void MainWindow::on_pushButton_6_clicked()
{
    query=QSqlQuery(db);
    QString sq="";
    // 使数据库支持中文
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
    ParaInt = NextInt * 3;
    NextInt++;
    ui->lineEdit->setText(QString::number(NextInt));
    if(NextInt > 1) {
        ui->pushButton_5->setEnabled(true);
    }
    if(PreviousInt == NextInt) {
        ui->pushButton_6->setEnabled(false);
    }
    // 查询数据
    sq="SELECT * FROM db_mysql ORDER BY M_AID LIMIT "+QString::number(ParaInt)+",3";

    if (query.exec(sq)) {
        qDebug("查询成功");
    } else {
        qDebug("查询失败");
    }
    /* 设置表格标题行(输入数据为QStringList类型) */
    model->setHorizontalHeaderLabels({"KEY_ID", "M_ID", "PassWord", "Name", "Age", "Sex"});
    QList< QString > qstrList[200];
    int lint=0,fint=0;
    QString str="";
    while (query.next()) {

        qstrList[lint++].append(QString::number(query.value(0).toInt()));
        qstrList[lint++].append(query.value(1).toString());
        qstrList[lint++].append(QString::number(query.value(2).toInt()));
        qstrList[lint++].append(query.value(3).toString());
        qstrList[lint++].append(QString::number(query.value(4).toInt()));
        qstrList[lint++].append(QString::number(query.value(5).toInt()));
    }
    lint=0;
    for (int i = 0; i < 13; i++) {

        model->setItem(i,0,new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 1, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 2, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 3, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 4, new QStandardItem(qstrList[lint++].join("")));
        model->setItem(i, 5, new QStandardItem(qstrList[lint++].join("")));
    }

    /* 设置表格视图数据 */
    ui->tableView->setModel(model);

    /* 显示 */
    ui->tableView->show();
}

6. 其他问题

项目完整版下载地址:https://mp.csdn.net/console/upDetailed

MySQL进行增删改查操作:

MySQL生成对应版本的驱动:https://blog.csdn.net/qq_37529913/article/details/109850670

猜你喜欢

转载自blog.csdn.net/qq_37529913/article/details/110039629
今日推荐