1.首先需要安装mysql
(1)如何查看mysql电脑里的安装位置:
window+R
(2)qt 与MySQL的驱动
1.需要安装源码:运行安装mysql.pro,在D:\plugins\sqldrivers,将D:\plugins\sqldrivers目录下的qsqlmysql.dll文件复制到D:\deve_qt\5.12.12\mingw73_64\plugins\sqldrivers
#在mysql.pro中修改
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
INCLUDEPATH += $$quote("D:\\mysql\\mysql-8.0.27-winx64\\include") #本机mysql的include目录
LIBS += -L$$quote("D:\\mysql\\mysql-8.0.27-winx64\\lib") -lmysql #本机mysql的lib目录
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
#指定这个文件的绝对地址,具体这个路径的位置你可以看下图"qsqldriverbase.pri的路径"
include(D:\\deve_qt\\5.12.12\\Src\\qtbase\\src\\plugins\\sqldrivers\\qsqldriverbase.pri)
include(../qsqldriverbase.pri)
#在qsqldriverbase.pri中修改
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
#include "widget.h"
#include "ui_widget.h"
#include <QtSql/QSqlDatabase> // 连接数据库
#include <QtSql/QSqlError> // 数据库连接失败打印报错语句
#include <QtSql/QSqlQuery> // 数据库操作(增删改查)
#include <QMessageBox>
#include <QVariantList> // 泛型链表,可以存储任何类型的数据
#include <QDebug>
#include <QtSql>
#include <QApplication>
#include <QSqlDatabase>
#include <QStringList>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setPort(3306);
db.setDatabaseName("baby128");
db.setUserName("root");
db.setPassword("123456");
db.open();
bool ok = db.open();
if (ok){
QMessageBox::information(this, "infor", "link success");
}
else {
QMessageBox::information(this, "infor", "link failed");
qDebug()<<"error open database because"<<db.lastError().text();
}
QSqlQuery result = db.exec("select * from baseinfor");
for(int i=0; i<3; i++) {
result.next();
qDebug() << result.value("no").toString() << '\\t' << result.value("name").toString() << '\\t'
<< result.value("passWord").toString() << '\\t' << result.value("other").toString() << endl;
}
result.clear();
}
Widget::~Widget()
{
delete ui;
}
(2)qt creator
1.ui界面设计
void RegeditWindow::on_regSubPb_clicked() { QString username = ui->usernameRegTxt->text().trimmed(); QString year=ui->year->text().trimmed(); QString pwd1 = ui->pwd1RegTxt->text().trimmed(); QString pwd2 = ui->pwd2RegTxt->text().trimmed(); QString xb=ui->sex->text().trimmed(); QString jg=ui->native_2->text().trimmed(); if(pwd1.isEmpty()||pwd2.isEmpty()||username.isEmpty()||year.isEmpty()||xb.isEmpty()||jg.isEmpty()){ } else{ if(pwd1==pwd2){ // 存储格式 字符串 用户名,密码 // UserData::usernameandpwd2 = username+","+pwd1; // // QSettings cfg(QSettings::IniFormat,QSettings::UserScope,"config"); //cfg.setValue("username",username); //cfg.setValue("pwd",pwd1); //qDebug()<< "regedit successfully!"; //this->parentWidget()->show(); //delete this; if(UserData::connect("baby128")) { QSqlQuery sqlQuery; bool is_table_exist = sqlQuery.exec("select * from tbllogin"); if(!is_table_exist){ sqlQuery.exec("CREATE TABLE tbllogin (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(10),pwd VARCHAR(10),year VARCHAR(10),xb VARCHAR(10),jg VARCHAR(10))"); qDebug()<<"create"; } sqlQuery.exec("SELECT id,name,pwd,year,xb,jg FROM tbllogin"); while (sqlQuery.next()){ int id = sqlQuery.value(0).toInt(); QString name = sqlQuery.value(1).toString(); QString pwd = sqlQuery.value(2).toString(); QString year = sqlQuery.value(3).toString(); QString xb = sqlQuery.value(4).toString(); QString jg= sqlQuery.value(5).toString(); max_id++; qDebug()<<id<<" "<<name<<" "<<pwd<<" "<<year<<" "<<xb<<" "<<jg<<" "; } QSqlQuery sqlquery; sqlquery.prepare("INSERT INTO tbllogin VALUES(?,?,?,?,?,?)"); sqlquery.addBindValue(max_id+1); sqlquery.addBindValue(username); sqlquery.addBindValue(pwd1); sqlquery.addBindValue(year); sqlquery.addBindValue(xb); sqlquery.addBindValue(jg); if(sqlquery.exec()){ qDebug()<<"regedit successfully!"; this->parentWidget()->show(); delete this; } else{ qDebug()<<sqlquery.lastError(); } } else{ } } } }
void MainWindow::on_submitPb_clicked()
{
QString username = ui->usernameTxt->text().trimmed();
QString pwd = ui->pwdTxt->text().trimmed();
// if(QString::compare(UserData::usernameandpwd2,username+","+pwd)==1)
//QSettings cfg(QSettings::IniFormat,QSettings::UserScope,"config");
//QString usernameIni = cfg.value("username","null").toString();
//QString pwdIni = cfg.value("pwd","null").toString();
//if(username==usernameIni&&pwd==pwdIni)
//{
// qDebug()<<"Login in!";
//HomeWindow *homewindow = new HomeWindow(this);
//homewindow->show();
//this->hide();
//}
// else{
// qDebug()<<"data wrong!";
//}
if(UserData::connect("baby128"))
{
QSqlQuery sqlQuery;
bool is_table_exist = sqlQuery.exec("select * from tbllogin");
if(!is_table_exist){
sqlQuery.exec("CREATE TABLE tbllogin (id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),password VARCHAR(20))");
}
QSqlQuery sqlquery;
sqlquery.prepare("SELECT * FROM tbllogin where name=:name and pwd=:pwd");
sqlquery.bindValue(":name",username);
sqlquery.bindValue(":pwd",pwd);
sqlquery.exec();
QString result;
while(sqlquery.next())
{
result+="用户名:"+sqlquery.value(1).toString()+'\t'+"密码:"+sqlquery.value(2).toString()+'\n';
qDebug()<<"Login in!"+result;
HomeWindow *homewindow = new HomeWindow(this);
homewindow->show();
this->hide();
}
}
}
(3)运行结果
结果:实现了qt与MySQL的连接,并且可以将qt 的注册信息存储在数据库里面。
遇到问题,我们一起讨论