摘要:QT中使用Mysql数据库,实现增删查改的功能
文章目录
一、如何通过QT连接到Mysql数据库?
本次编译器版本为5.12.3 MinGW 32 bit ,此版下QT已经将自带的mysql驱动取消了。
1.查看自己的QT是否自带mysql驱动
代码如下(示例):
qDebug()<<QSqlDatabase::drivers();
运行程序可以在程序输出找到(“QSQLITE”, “QMYSQL”, “QMYSQL3”, “QODBC”, “QODBC3”, “QPSQL”, “QPSQL7”);若自己的程序输出找不到"QMYSQL",那么就需要自己手动添加mysql的驱动给QT。
2.添加mysql驱动给QT
添加mysql驱动给QT有两种方法:
(1)复制mysql的文件给QT
将mysql安装文件的lib目录下的libmysql.dll和libmysqld.dll复制到Qt5.12.3(自己的QT版本)中的mingw493_32的bin文件下。
!!!要注意编译器的位数和mysql的位数相对应,若你的编译器使用的64位,那就从64位的mysql安装目录中找libmysql.dll和libmysqld.dll,位数不对应依然会报错。
!!!驱动文件很容易搜到,没必要的话不需要去下载数据库,或者下载免安装版的mysql,找到库文件即可。
(2)通过重新编译QT源代码
安装QT时要勾选Source才可以,本人在QT5.14.0使用此方法进行编译测试时,编译后只有64位能正常使用mysql,最后只能将问题算在此版的bug上,由于我通过此方式实现的结果不理想,所以本次就不介绍此方法的实现了。想探索的朋友可以去搜一下相关文章。
二、数据库的操作
本人将数据库的操作进行了封装,方便以后的使用,sust_sql是我自己封装的类。
1.连接数据库
奉上连接代码:
/********************************************
* 函数名称:connectmysql(QString Host,int port,QString Dname,QString Uname,QString Pass)
* 功能:连接到mysql数据库
* 工作方式:
* 参数:
* 参数1:QString类型 数据库的IP地址
* 参数2:int类型 端口号、
* 参数3:QString类型 数据库名
* 参数4:QString类型 用户名
* 参数5:QString类型 数据库密码
* 返回值:连接成功返回true,失败返回false
* 备注:
* 修改记录
*********************************************/
bool sust_sql::connectmysql(QString Host,int port,QString Dname,QString Uname,QString Pass)
{
qDebug()<<QSqlDatabase::drivers();
QSqlDatabase My_DB = QSqlDatabase::addDatabase("QMYSQL");
My_DB.setHostName(Host);
My_DB.setPort(port);
My_DB.setDatabaseName(Dname);
My_DB.setUserName(Uname);
My_DB.setPassword(Pass);
bool ok = My_DB.open();
if(ok){
qDebug()<< "连接成功";
return true;
}
else {
qDebug()<< "连接失败";
return false;
}
}
2.增加数据到数据库
奉上增加数据代码:
/********************************************
* 函数名称:Write_mysql(int a,QString str1,QString str2,QString str3)
* 功能:将数据写入到数据库
* 工作方式:
* 参数:
* 参数1:id号
* 参数2:学生姓名
* 参数3:学生性别
* 参数4:学生学号
* 返回值:连接成功返回true,失败返回fasle
* 备注:
* 修改记录
*********************************************/
bool sust_sql::Write_mysql(int a,QString str1,QString str2,QString str3)
{
QSqlQuery My_Query;
QString insert_db = QString("insert into SUST_DB values('%4','%1','%2','%3')")
.arg(a).arg(str1).arg(str2).arg(str3); //SUST_DB是数据库的表名
// My_Query.exec(insert_db);
if(My_Query.exec(insert_db))
{
return true;
}
else {
return false;
}
}
3.从数据库删除数据
根据姓名删除数据
奉上删除数据代码:
/********************************************
* 函数名称:Delete_mysql(QString name)
* 功能:将数据写入到数据库
* 工作方式:
* 参数:
* 参数1:学生姓名
* 返回值:删除成功返回true,失败返回fasle
* 备注:
* 修改记录
*********************************************/
bool sust_sql::Write_mysql(QString name)
{
QSqlQuery My_Query;
QString insert_db = QString("delete from SUST_DB where name = '%1'").arg(name) //SUST_DB是数据库的表名
// My_Query.exec(insert_db);
if(My_Query.exec(insert_db))
{
return true;
}
else {
return false;
}
}
4.从数据库中查找
本次只写了根据姓名查找的方法,可以通过重载的方式或者重写函数进行多功能查找
奉上查找代码:
/********************************************
* 函数名称:Find_mysql(QString find)
* 功能:在数据库中查找数据
* 工作方式:
* 参数:
* QString 类型 根据姓名查找
* 返回值:连接成功返回true,失败返回fasle
* 备注:
* 修改记录
*********************************************/
void sust_sql::Find_mysql(QString find)
{
QString name;
QString sex;
QString stu_number;
QString str = QString("select *from SUST_DB where name = '%1'").arg(find);
QSqlQuery query;
query.exec(str);
while(query.next()) //遍历数据库查找数据
{
name = query.value(1).toString();
sex = query.value(2).toString();
stu_number = query.value(3).toString();
qDebug() << name;
qDebug() << sex;
qDebug() << stu_number;
}
}