QT编译MySQL驱动和操纵MySQL

一、编译MySQL驱动

1.软件版本

QT:5.12.12
MySQL:8.0.17

2.用Ot Creator打开Qt安装目录下

D:\Qt\Qt5.12.12\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro的MySQL源码,如果安装目录下没有这个文件夹,就重装Qt,安装时记得勾选安装源码。

TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

#第一步,注释掉qmake
#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

#第二步,添加.h依赖文件,找到自己安装的mysql对应路径
INCLUDEPATH += "C:/Program Files/MySQL/MySQL Server 8.0/include"
DEPENDPATH += "C:/Program Files/MySQL/MySQL Server 8.0/include"

#第三步,添加依赖的.lib文件
LIBS += "C:/Program Files/MySQL/MySQL Server 8.0/lib/libmysql.lib"

#第四步生成你所需要的dll存放目录
DESTDIR = ../mysql/mylib

3.编译生成需要的文件,在工程同级目录下的mylib文件夹中。

4.将编译生成的文件放到对应目录,选择自己对应的编译器版本。

5. 在mysql安装路径找到mysql的libmysql.dll和libmysql.lib拷贝到相应的编译套件的bin目录下

二、测试增删改查操作 

1.在项目.pro文件中添加

QT       += sql

2.引入数据库相应头文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
#include<QDebug>
#include<QMessageBox>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //输出可用数据库
//        qDebug()<<"available drivers:";
//        QStringList drivers = QSqlDatabase::drivers();
//        foreach(QString driver, drivers)
//            qDebug()<<driver;

        QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");    //括号内要写出数据库的类型
        //设置数据库
        db.setHostName("127.0.0.1"); //设置数据库的主机ip
        //设置数据库的用户名
        db.setUserName("root");
        //设置数据库的密码
        db.setPassword("root");    //这个就是安装MySQL时设置的密码
        //设置数据库的名字
        db.setDatabaseName("db1");
        //打开数据库(已经安装过mysql驱动了)
        if(db.open()==false){
            QMessageBox::warning(this,"waring",db.lastError().text());
        }else{
            qDebug()<<"数据库打开成功";
        }

        //插入数据
        QString sql = "insert into stu (id,name,age,score) values (1,'kaw',20,97)";	//书写想要执行的语句
        QSqlQuery query;	//创建一个QSqlQuery对象
        query.exec(sql);    //执行mysql语句

        //修改数据
        QString sqlUpd = "update stu set age=22 where id=1";	//书写想要执行的语句
        QSqlQuery queryUpd;	//创建一个QSqlQuery对象
        queryUpd.exec(sqlUpd);    //执行mysql语句

        //删除数据
//        QString sqlDel = "delete from stu where id=1";	//书写想要执行的语句
//        QSqlQuery queryDel;	//创建一个QSqlQuery对象
//        queryDel.exec(sqlDel);    //执行mysql语句

        //查询操作
        QString sqlSel="select * from stu";
        QSqlQuery querySel;
        querySel.exec(sqlSel);
        while(querySel.next()){
            qDebug()<<querySel.value(0).toInt()
                 <<querySel.value("name").toString().toUtf8().data()
                <<querySel.value(2).toInt()
               <<querySel.value(3).toInt();
        }
        qDebug()<<"Qt version:" << qVersion();
}