欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows环境下Qt连接MySql

程序员文章站 2022-03-09 13:36:31
...

环境

windwos: v10
mysql: v5.7.29 x32
Qt creator: v4.11.0
Qt: v5.14.0 (MVSC 2017 x32)

安装mysql

这里使用mysql非安装版

//配置my.ini
mysqld --initialize //初始化data目录
mysqld install      //安装mysql服务
net start mysql     //开启mysql服务
//根据data目录下的.err文件中生成的随机密码登陆mysql
ALTER USER USER() IDENTIFIED BY root'; //修改密码
flush privileges;//刷新权限

安装qt

在安装时选择源码(source)

编译qt-mysql驱动

使用qt-creator打开

C:\Qt\Qt5.14.0\5.14.0\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro

编辑:

TARGET = qsqlmysql

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

#注释原有引用
#QMAKE_USE += mysql

#-----新增------
QT += sql
#mysql include 目录
INCLUDEPATH += C:\mysql-5.7.29-win32\include
#mysql 库文件
LIBS += -LC:\mysql-5.7.29-win32\lib -llibmysql
#-----------

OTHER_FILES += mysql.json

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

构建

驱动文件会生成在:Qt所在盘符/plugins中

将驱动文件(.lib,.dll)粘贴到QT_HOME/plugins/sqldrivers中

引入mysql库文件(libmysql.dll,libmysql.lib)至QT_HOME/bin

测试连接

创建demo工程

编辑demo.pro

QT+=sql

加载驱动测试

编辑main.cpp

#include "mainwindow.h"
#include <QApplication>

#include "QtSql"

int main(){
    QApplication a(argc, argv);
    MainWindow w;
    #------新增------
    QStringList drivers = QSqlDatabase::drivers();

    foreach(QString driver,drivers){
        qDebug()<<driver;
    }
    #------新增------  
    w.show();
    return a.exec();
}

编译运行输出

"QSQLITE"
"QMYSQL"
"QMYSQL3"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

数据库连接测试

创建连接类DatabaseLinker

databaselinker.h

#ifndef DATABASELINKER_H
#define DATABASELINKER_H

#include "QtSql"

class DataBaseLinker
{
private:
    QSqlDatabase db;

public:
    DataBaseLinker();
};

#endif // DATABASELINKER_H

databaselinker.cpp

#include "databaselinker.h"

DataBaseLinker::DataBaseLinker()
{
    this->db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("root");
    db.setDatabaseName("test");
    bool ok = db.open();
    if(ok){
        qDebug()<<"db linked successful";
        return ;
    }
    qDebug()<<"db link failed";
}

main.cpp

#include "QtSql"

#include "databaselinker.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    QStringList drivers = QSqlDatabase::drivers();

    foreach(QString driver,drivers){
        qDebug()<<driver;
    }

    DataBaseLinker *linker = new DataBaseLinker();

    w.show();
    return a.exec();
}

output

"QSQLITE"
"QMYSQL"
"QMYSQL3"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"
db linked successful
相关标签: QT qt5