QT操作mysql数据库

**

更新时间:2020-08-09

**

参考:
1.QT连接数据库
2.简单常用函数解释
3.增删改查

mingw32位连接mysql数据库
参考:32位qt程序, 利用32位mysql驱动,连接64位mysql8.0

QT使用操作mysql数据库的详细教程
(给自己看的。哈哈哈)
首先第一步,导入数据库模块
pro文件添加: QT += sql

头文件添加:
#include < QSqlDatabase>
#include < QSqlError>
#include < QSqlQuery>
#include < QSqlRecord>

连接数据库

//连接数据库
void OpeateDB::linkDB()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("testdb");//数据库名

    if(!db.open())
    {
        qDebug()<<db.lastError();
        qDebug()<<"link mysql failed";
        bislink = false;
        return;
    }else
    {
        qDebug()<<"link mysql success";
        bislink = true;
    }
    //断开数据库
    //db.close();
}



连接的地址,账号,密码,和端口,数据库名就不赘述了。(建议用配置文件)
下面这个地址有操作演示:
常用操作

下面就是正文了:
数据库操作部分

常用查找select部分:

void OpeateDB::findRecord()
{
    //获取表格所有字段名
    QString sql = QString("select COLUMN_NAME from information_schema.COLUMNS where table_name = 'test_table'");
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数

        while(query.next())//指向下一条
        {
            //根据下标找到对应字段值
            qDebug()<<query.value(0).toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }

    //获取数据库中所有表名
    QString sql4 = QString("select table_name from information_schema.tables where table_schema='testdb'");
    if(query.exec(sql4)) //执行sql语句是否成功
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数

        while(query.next())//指向下一条
        {
            //根据下标找到对应字段值
            qDebug()<<query.value(0).toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }

    //根据指定的字段查询记录
    QString sql2 = QString("select *from test_table where NAME ='%1' and AGE = '%2'").arg("wyz").arg(21);
    if(query.exec(sql2))
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数
        while(query.next())
        {
            qDebug()<<query.value("ID").toString();
            qDebug()<<query.value("NAME").toString();
            qDebug()<<query.value("AGE").toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }

    //根据指定字段名输入该列信息
    QString sql3 = QString("select NAME from test_table");
    if(query.exec(sql3))
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数
        while(query.next())
        {
            //两种写法-下标输出,和指定字段输出
            qDebug()<<query.value(0).toString();
            //qDebug()<<query.value("NAME").toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }
}

在这里插入图片描述

常用修改update部分:

//更新表格指定行的某个字段的值
    QString sql = QString("update test_table set AGE = '%2' where ID = '%1'").arg(1).arg(18);
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {

        qDebug()<<"update success";

    }else
    {
        qDebug()<<query.lastError();
    }

常用插入insert部分:

void OpeateDB::insertRecord()
{
    //插入记录
    QString sql = QString("insert into test_table(ID, NAME, AGE) "
                          "VALUES ('%1','%2', '%3')")
            .arg(NULL).arg("").arg(22);
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {

        qDebug()<<"insert success";

    }else
    {
        qDebug()<<query.lastError();
    }
}

常用删除del部分:

void OpeateDB::delRecord()
{
    //根据指定id删除记录
    QString sql = QString("delete from test_table  where ID = '%1'").arg(2);
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {

        qDebug()<<"delete success";

    }else
    {
        qDebug()<<query.lastError();
    }
}

下面给个类:(内容要自己去修改)
头文件:

#ifndef OPEATEDB_H
#define OPEATEDB_H
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>

class OpeateDB
{
public:
    OpeateDB();

    void linkDB();


    void test();

    void findRecord();
    void updateRecord();
    void delRecord();
    void insertRecord();




    bool bislink;

};

#endif // OPEATEDB_H

cpp文件:

#include "opeatedb.h"
#include <QDebug>

OpeateDB::OpeateDB()
{
    bislink = false;
    linkDB();
}

//连接数据库
void OpeateDB::linkDB()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("123456");
    db.setDatabaseName("testdb");//数据库名

    if(!db.open())
    {
        qDebug()<<db.lastError();
        qDebug()<<"link mysql failed";
        bislink = false;
        return;
    }else
    {
        qDebug()<<"link mysql success";
        bislink = true;
    }
}

void OpeateDB::test()
{

//    findRecord();
//    updateRecord();
//    delRecord();
    insertRecord();
}

void OpeateDB::findRecord()
{
    //获取表格所有字段名
    QString sql = QString("select COLUMN_NAME from information_schema.COLUMNS where table_name = 'test_table'");
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数

        while(query.next())//指向下一条
        {
            //根据下标找到对应字段值
            qDebug()<<query.value(0).toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }

    //获取数据库中所有表名
    QString sql4 = QString("select table_name from information_schema.tables where table_schema='testdb'");
    if(query.exec(sql4)) //执行sql语句是否成功
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数

        while(query.next())//指向下一条
        {
            //根据下标找到对应字段值
            qDebug()<<query.value(0).toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }

    //根据指定的字段查询记录
    QString sql2 = QString("select *from test_table where NAME ='%1' and AGE = '%2'").arg("wyz").arg(21);
    if(query.exec(sql2))
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数
        while(query.next())
        {
            qDebug()<<query.value("ID").toString();
            qDebug()<<query.value("NAME").toString();
            qDebug()<<query.value("AGE").toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }

    //根据指定字段名输入该列信息
    QString sql3 = QString("select NAME from test_table");
    if(query.exec(sql3))
    {
        qDebug()<<"find record num:"<<query.size();//查询结果记录条数
        while(query.next())
        {
            //两种写法-下标输出,和指定字段输出
            qDebug()<<query.value(0).toString();
            //qDebug()<<query.value("NAME").toString();
        }

    }else
    {
        qDebug()<<query.lastError();
    }
}

void OpeateDB::updateRecord()
{
    //更新表格指定行的某个字段的值
    QString sql = QString("update test_table set AGE = '%2' where ID = '%1'").arg(1).arg(18);
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {

        qDebug()<<"update success";

    }else
    {
        qDebug()<<query.lastError();
    }
}

void OpeateDB::delRecord()
{
    //根据指定id删除记录
    QString sql = QString("delete from test_table  where ID = '%1'").arg(2);
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {

        qDebug()<<"delete success";

    }else
    {
        qDebug()<<query.lastError();
    }
}

void OpeateDB::insertRecord()
{
    //插入记录
    QString sql = QString("insert into test_table(ID, NAME, AGE) "
                          "VALUES ('%1','%2', '%3')")
            .arg(NULL).arg("").arg(22);
    QSqlQuery query;
    if(query.exec(sql)) //执行sql语句是否成功
    {

        qDebug()<<"insert success";

    }else
    {
        qDebug()<<query.lastError();
    }
}

.h和.cpp文件

/**
 * @desc 数据库操作
 * @author wqj
 * @2022年02月24日
 */
#ifndef OPEATEDB_H
#define OPEATEDB_H
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>

class OpeateDB
{
public:
    OpeateDB();
    ~OpeateDB();

    /*
        连接打开数据库
        参数:
            [ip] 数据库连接地址
            [user] 用户名
            [password] 密码
            [dbName] 数据库名
            [errorStr] 连接错误信息

        返回值:
            true - 成功,>false - 失败
    */
    bool LinkDB(QString ip,QString user,QString password,QString dbName/*,QString errorStr*/);

    /*
        关闭数据库
        返回值:
            true - 成功,>false - 失败
    */
    bool CloseDB();

    /*
        执行sql语句
        参数:
            [query] 数据库连接地址0
            [sql] sql语句字符串

        返回值:
            true - 成功,>false - 失败
    */
    bool ExcuSqlStr(QSqlQuery &query,QString sql);


    bool bool_islink;

private:
    QSqlDatabase db;

};

#endif // OPEATEDB_H


#include "tools/operatedb.h"
#include <QDebug>

#define IS_DEBUG true

OpeateDB::OpeateDB()
{
    bool_islink = false;
}

OpeateDB::~OpeateDB()
{
    if(db.isOpen())
    {
        db.close();
    }
}

bool OpeateDB::LinkDB(QString ip,QString user,QString password,QString dbName)
{
    db = QSqlDatabase::addDatabase("QMYSQL");
    if(ip.isEmpty())
    {
        ip = "127.0.0.1";
    }
    db.setHostName(ip);//127.0.0.1
    db.setPort(3306);
    db.setUserName(user);//root
    db.setPassword(password);//123456
    db.setDatabaseName(dbName);//数据库名

    if(!db.open())
    {
        if(IS_DEBUG)
        {
            qDebug()<<"link mysql failed:"<< db.lastError();
        }
//        errorStr = (QString)db.lastError().text();
        bool_islink = false;
    }else
    {
        if(IS_DEBUG)
        {
            qDebug()<<"link mysql success";
        }
        bool_islink = true;
    }
    return bool_islink;
}

bool OpeateDB::CloseDB()
{
    if(db.isOpen())
    {
        db.close();
        if(IS_DEBUG)
        {
            qDebug()<<"close mysql success";
        }
    }
    return true;
}

bool OpeateDB::ExcuSqlStr(QSqlQuery &query,QString sql)
{
    if(!query.exec(sql)) //执行sql语句是否成功
    {
        if(IS_DEBUG)
        {
             qDebug()<<"excu sqlstr error:"<<query.lastError();
        }
        return false;
    }
    if(IS_DEBUG)
    {
         qDebug()<<"excu sqlstr success";
    }
    return true;
}



~持续更新

  • 10
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值