目录
开发环境
开发过程 mysql数据库部分 qt开发部分 出现的问题及修复
开发环境
开发过程 mysql数据库部分 开启
连接
在mysql中新建数据库
1 CREATE DATABASE login_test DEFAULT CHARSET utf8;
选择数据库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 #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 #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.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 #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 QT += core gui sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = login_test TEMPLATE = app DEFINES += QT_DEPRECATED_WARNINGS 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