Qt5开发学习总结(五)——Qt5 使用 MySQL 数据库及简单应用
2018-02-03 18:23
661 查看
安装 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 <QMessageBox> #include <QSqlDatabase> #include <QSqlQuery> 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 <QApplication> #include "connection.h" #include <QProcess> #include<QStyleFactory> //修改风格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 等部件,最终效果如图所示。
( 6) 打开mainwindow.h
文件, 添加类的前置声明:
class QSqlTableModel;
然后再定义一个私有对象:
private: QSqlTableModel *model;
( 7) mainwindow.cpp
文件中, 添加头文件包含:
#include <QSqlQuery> #include <QSqlTableModel> #include <QSqlError> #include <QMessageBox>
在构造函数中添加如下代码: 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撤销修改
如果将“ 张老师” 修改为“ 李老师” 并按下回车键, 虽然这里已经修改了, 但是并没有实际写入到数据库, 单击“ 撤销修改” 按钮, 可以改回了“张老师”。删除选中行
可以删除该行。查询
在“姓名” 中输入“王老师”, 然后单击“ 查询” 按钮, 就可以显示“ 王老师” 一行, 效果如图排序
单击“按 id 降序排列” 按钮, 可以按照 id 从大到小排列各行, 效果如图所示。部分学习自《Qt Creator快速入门》及实验讲义
相关文章推荐
- 数据库安全应用 使用MySQL的23个注意事项
- mysql 数据库 简单存储过程游标使用
- 使用 MySQL 数据库创建简单的 JSP 应用程序(1)
- MySQL---数据库从入门走向大神系列(七)-Java访问数据库配置及简单使用方法execute
- oracle 数据库 迁移到mysql 简单高效工具使用
- C#使用DataSet类、DataTable类、DataRow类、OleDbConnection类、OleDbDataAdapter类编写简单数据库应用
- mysql的安装与简单使用以及myeclipse下与数据库的连接和使用
- 基于MySQL的高性能数据库应用研发(使用C++操作MYSQL)
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
- mysql 简单教程(二) ----创建和使用数据库
- 了解数据库和mysql的简单使用
- 使用JDBC技术连接数据库(附源码)--JAVA的简单应用
- Spring Boot应用连接数据库MySQL、及一个简单的demo
- 使用microsoft EnterpriseLibrary连接不同数据库简单应用
- 使用JDBC开发简单的数据库应用
- 使用microsoft EnterpriseLibrary连接不同数据库简单应用 .
- 登录使用OPENSHIFT搭建的PHP+MYSQL应用,显示【连接数据库失败,数据库用户名或密码错误
- 数据库oracle--mysql 简单命令的使用
- Maven + Spring MVC+Mybatis + MySQL +AngularJS + Bootstrap 实现简单微博应用(二)访问数据库
- MySQL5.7 + Workbench的安装和创建数据库以及表等简单使用