摘要:QT中使用Mysql数据库,实现增删查改的功能


文章目录

  • 一、如何通过QT连接到Mysql数据库?
  • 1.查看自己的QT是否自带mysql驱动
  • 2.添加mysql驱动给QT
  • (1)复制mysql的文件给QT
  • (2)通过重新编译QT源代码
  • 二、数据库的操作
  • 1.连接数据库
  • 2.增加数据到数据库
  • 3.从数据库删除数据
  • 4.从数据库中查找
  • 总结



一、如何通过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;

    }
}

总结


QT中使用数据库相对简单,刚接触QT使用Mysql时,主要就是配置好mysql驱动的问题,在使用QT进行数据库操作时,熟悉数据库的操作语句基本上就不会有什么问题了。