目录

开发环境

  • mysql5.0
  • qt5.8

开发过程

mysql数据库部分

qt开发部分

出现的问题及修复

开发环境

  • mysql5.0
  • qt5.8

开发过程

mysql数据库部分

开启

连接

在mysql中新建数据库

1
CREATE DATABASE login_test DEFAULT CHARSET utf8;

选择数据库login_test

1
use login_test;

新建表格user_login

1
2
3
4
5
6
7
CREATE TABLE user_login
(
user_id int PRIMARY KEY AUTO_INCREMENT,
user_name varchar(60) NOT NULL,
user_pwd varchar(60) NOT NULL,
user_datetime datetime NOT NULL
);

qt开发部分

新建qt项目,命名为login_test

需要实现的功能

  • 初始化数据库
  • 用户注册
  • 用户登录

初始化数据库函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Widget::InitDatabase()
{
qDebug() << "Init database";
m_DB = QSqlDatabase::addDatabase("QMYSQL");
m_DB.setHostName("localhost");
m_DB.setDatabaseName("login_test");
m_DB.setUserName("root");
m_DB.setPassword("123456");
if (!m_DB.open())
{
qDebug() << "open error";
ui->user_login->setEnabled(false);
ui->user_register->setEnabled(false);
return;
}
qDebug() << "open ok";
}

用户注册函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Widget::on_user_register_clicked()
{
QString strName = ui->user_name->text();
QString strPwd = ui->user_pwd->text();
qDebug() << strName << " " << strPwd;
if (strName.length() == 0 || strPwd.length() == 0)
{
qDebug() << "user name or pwd error";
return ;
}
QString strSql = "insert into user_login (user_name, user_pwd, user_datetime) values ('" + strName
+ "','" + strPwd + "', now())";
qDebug() << strSql;
QSqlQuery query(m_DB);
if (!query.exec(strSql))
{
qDebug() << "sql exec error";
return;
}
qDebug() << "register ok";
}

用户登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void Widget::on_user_login_clicked()
{
QString strName = ui->user_name->text();
QString strPwd = ui->user_pwd->text();
qDebug() << strName << " " << strPwd;
if (strName.length() == 0 || strPwd.length() == 0)
{
qDebug() << "user name or pwd error";
return ;
}
QString strSql = "select user_id from user_login where user_name = '" + strName + "' and user_pwd = '" + strPwd +"'";
qDebug() << strSql;
QSqlQuery query(m_DB);
if (!query.exec(strSql))
{
qDebug() << "sql exec error";
return;
}
if (!query.next())
{
qDebug() << "login error";
return;
}
qDebug() << "login ok";
}
完整代码

main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//main.cpp
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.InitDatabase();
w.show();

return a.exec();
}

widget.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlDatabase>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

void InitDatabase();

private slots:
void on_user_login_clicked();
void on_user_register_clicked();

private:
Ui::Widget *ui;
QSqlDatabase m_DB;
};

#endif // WIDGET_H

widget.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//widget.cpp
#include <QDebug>
#include <QSqlQuery>
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}

Widget::~Widget()
{
delete ui;
}

void Widget::InitDatabase()
{
qDebug() << "Init database";
m_DB = QSqlDatabase::addDatabase("QMYSQL");
m_DB.setHostName("localhost");
m_DB.setDatabaseName("login_test");
m_DB.setUserName("root");
m_DB.setPassword("123456");
if (!m_DB.open())
{
qDebug() << "open error";
ui->user_login->setEnabled(false);
ui->user_register->setEnabled(false);
return;
}
qDebug() << "open ok";
}

void Widget::on_user_login_clicked()
{
QString strName = ui->user_name->text();
QString strPwd = ui->user_pwd->text();
qDebug() << strName << " " << strPwd;
if (strName.length() == 0 || strPwd.length() == 0)
{
qDebug() << "user name or pwd error";
return ;
}
QString strSql = "select user_id from user_login where user_name = '" + strName + "' and user_pwd = '" + strPwd +"'";
qDebug() << strSql;
QSqlQuery query(m_DB);
if (!query.exec(strSql))
{
qDebug() << "sql exec error";
return;
}
if (!query.next())
{
qDebug() << "login error";
return;
}
qDebug() << "login ok";
}

void Widget::on_user_register_clicked()
{
QString strName = ui->user_name->text();
QString strPwd = ui->user_pwd->text();
qDebug() << strName << " " << strPwd;
if (strName.length() == 0 || strPwd.length() == 0)
{
qDebug() << "user name or pwd error";
return ;
}
QString strSql = "insert into user_login (user_name, user_pwd, user_datetime) values ('" + strName
+ "','" + strPwd + "', now())";
qDebug() << strSql;
QSqlQuery query(m_DB);
if (!query.exec(strSql))
{
qDebug() << "sql exec error";
return;
}
qDebug() << "register ok";
}

login_test.pro

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#-------------------------------------------------
#
# Project created by QtCreator 2023-05-06T16:33:01
#
#-------------------------------------------------

QT += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = login_test
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0


SOURCES += main.cpp\
widget.cpp

HEADERS += widget.h

FORMS += widget.ui

出现的问题及修复

运行程序时出现driver not loaded

分析原因

如果Qt只有32位的。连接64位的mysql,需要将libmysql.dll放到qt安装目录lib路径下.

解决方法

将mysql中的libmysql.dll 放在QT的安装目录的 D:\software\Qt\Qt5.8.0\5.8\mingw53_32\lib下即可!

参考链接

Qt5.12.6 连接Mysql8.0 QSqlDatabase:QMySQL driver not loaded

32位Qt连接64位Mysql异常解决方案 异常位:QSqlDatabase:QMySQL driver not loaded