前言:
转载请附上连接,本帖原创请勿照抄。
QT连接MySQL实现分页目录
使用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