Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用

安装 MySQL 数据库

1.首先,从官网下载 MySQL 安装包

官方下载

2.安装过程可以参考这篇

MySQL 5.7 版本的安装及简单使用(图文教程)

3.可能会遇到的问题

Qt连接MySQL的时候提示“QSqlDatabase: QMYSQL driver not loaded”,

原因一:缺少文件

解决办法

X:\MySQL\lib中将 libmysql.dll 文件复制X:\Qt\Qt5.6.1\5.6\mingw49_32\bin中。运行程序

原因二:Qt Creator与MySQL位数不统一

如果上面的方法试过了还是不行那么应该是你安装的MySQL和QT的位数不同,可以打开MySQL控制台
输入show variables like '%version_%';即可查看MySql位数。

解决办法:

https://dev.mysql.com/downloads/connector/c/ 下载mysql-connector-c,在其lib目录中找到文件“libmysql.dll”。然后将这个文件复制到Qt的bin目录下,重启Qt Creator后重新打开工程就可以正确运行了。 总之,必须保证你拿到libmysql.dll这个文件对应的mysql的位数必须与QT的位数相同。

数据库基本操作与应用

( 1) 新建 Qt Widgets 应用, 项目名称为 sqlModel, 类名为 MainWindow, 基类选择QMainWindow。

( 2) 完成后在 sqlModel.pro文件中添加如下代码:

QT += sql

( 3) 往项目中添加新的 C++头文件, 名称为“ connection.h”, 完成后在其中添加数据库连接函数的定义:

#ifndef CONNECTION_H
#define CONNECTION_H
#include 
#include 
#include 
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mydata");       //这里输入你的数据库名
db.setUserName("root");
db.setPassword("");   //这里输入你的密码
if (!db.open()) {
QMessageBox::critical(0, QObject::tr("无法打开数据库"),
"无法创建数据库连接! ", QMessageBox::Cancel);
return false;
} //
下面来创建表
// 如果 MySQL 数据库中已经存在同名的表, 那么下面的代码不会执行
QSqlQuery query(db);
// 使数据库支持中文
query.exec("SET NAMES 'Latin1'");
// 创建 course 表
query.exec("create table course (id int primary key, "
"name varchar(20), teacher varchar(20))");
query.exec("insert into course values(0, '数学', '刘老师')");
query.exec("insert into course values(1, '英语', '张老师')");
query.exec("insert into course values(2, '计算机', '李老师')");
return true;
} #
endif // CONNECTION_H

( 4) 打开 main.cpp 文件, 修改内容如下,顺便修改下风格:

#include "mainwindow.h"
#include 
#include "connection.h"
#include 
#include                           //修改风格1步
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
     a.setStyle(QStyleFactory::create("fusion"));   //修改风格2步
    // 这里使用代码来运行 MySQL 数据库
    QProcess process;
    process.start("C:/Program Files/MySQL/MySQLServer/bin/mysqld.exe");
    if (!createConnection()) return 1;
    MainWindow w;
    w.show();
    return a.exec();
}

(5) 设计界面mainwindow.ui, 向界面上拖入 Label、 Push Button、 Line Edit和 Table View 等部件,最终效果如图所示。

Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用_第1张图片

( 6) 打开mainwindow.h文件, 添加类的前置声明:


class QSqlTableModel;

然后再定义一个私有对象:

private:
QSqlTableModel *model;

( 7) mainwindow.cpp文件中, 添加头文件包含:

#include 
#include 
#include 
#include 
在构造函数中添加如下代码:
model = new QSqlTableModel(this);
model->setTable("course");
model->select();
// 设置编辑策略
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
ui->tableView->setModel(model);

( 8) 下面到设计模式,分别右击各个按钮, 选择“ 转到槽”, 然后选择 clicked()信号。 更改各个槽函数的内容如下:

  • 提交修改按钮
void MainWindow::on_pushButton_clicked()
{
// 开始事务操作
model->database().transaction();
if (model->submitAll()) {
model->database().commit(); //提交
} else {
model->database().rollback(); //回滚
QMessageBox::warning(this, tr("tableModel"),
tr("数据库错误: %1").arg(model->lastError().text()));
}
}
  • 撤销修改按钮
void MainWindow::on_pushButton_2_clicked()
{
model->revertAll();
} 
  • 查询按钮, 进行筛选
void MainWindow::on_pushButton_7_clicked()
{

    QString name = ui->lineEdit->text();
    if(name.length()){
    //根据姓名进行筛选, 一定要使用单引号
    model->setFilter(QString("teacher = '%1'").arg(name));
    model->select();
    }else
    { QMessageBox::warning(this, tr("Warning"),tr("姓名不能为空") );
    }

}
  • 显示全表按钮
void MainWindow::on_pushButton_8_clicked()
{
model->setTable("course");
model->select();
}
  • 按 id 升序排列按钮
void MainWindow::on_pushButton_5_clicked()
{
//id 属性, 即第 0 列, 升序排列
model->setSort(0, Qt::AscendingOrder);
model->select();
} 
  • 按 id 降序排列按钮
void MainWindow::on_pushButton_6_clicked()
{
model->setSort(0, Qt::DescendingOrder);
model->select();
} 
  • 删除选中行按钮
void MainWindow::on_pushButton_4_clicked()
{
// 获取选中的行
int curRow = ui->tableView->currentIndex().row();
// 删除该行
model->removeRow(curRow);
int ok = QMessageBox::warning(this,tr("删除当前行!"),
tr("你确定删除当前行吗? "),QMessageBox::Yes, QMessageBox::No);
if(ok == QMessageBox::No)
{ // 如果不删除, 则撤销
model->revertAll();
} else { // 否则提交, 在数据库中删除该行
model->submitAll();
}
} 
  • 添加记录按钮
void MainWindow::on_pushButton_3_clicked()
{
// 获得表的行数
int rowNum = model->rowCount();
// 添加一行
model->insertRow(rowNum);
model->setData(model->index(rowNum,0),rowNum+1);
}

程序效果

添加记录

前面的星号表示该数据还没有写入到数据库, 这里 id 默认为已有的最大 id 值加 1

Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用_第2张图片

Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用_第3张图片

撤销修改

如果将“ 张老师” 修改为“ 李老师” 并按下回车键, 虽然这里已经修改了, 但是并没有实际写入到数据库, 单击“ 撤销修改” 按钮, 可以改回了“张老师”。

删除选中行

可以删除该行。
Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用_第4张图片

查询

在“姓名” 中输入“王老师”, 然后单击“ 查询” 按钮, 就可以显示“ 王老师” 一行, 效果如图
Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用_第5张图片

排序

单击“按 id 降序排列” 按钮, 可以按照 id 从大到小排列各行, 效果如图所示。
Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用_第6张图片
部分学习自《Qt Creator快速入门》及实验讲义

你可能感兴趣的:(QT5)