【MySQL】Qt远程链接MySQL(第五篇)

一、封装一个mysql的模块

建立一个mysql.pri

HEADERS += \
    $$PWD/CMySql.h

SOURCES += \
    $$PWD/CMySql.cpp


INCLUDEPATH+="C:\Program Files (x86)\MySQL\MySQL Server 5.7\include"

LIBS+="C:\Program Files (x86)\MySQL\MySQL Server 5.7\lib\libmysql.lib"

INCLUDEPATH 存放的是Mysql的系统安装路径中mysql.h所在的目录

LIBS 存放的是Mysql的引入库文件

然后将libmysql.dll 放入C:/windows/System32 下 

CMysql.h

#pragma once
#include <mysql.h>
//#include <WinSock2.h>
//#pragma comment(lib,"../mysql/libmysql.lib")
//
#include <list>
#include <string>
using namespace std;

class CMySql
{
public:
    CMySql(void);
    ~CMySql(void);
public:                   //ip ,                    用户名,      密码   ,  数据库
    bool  ConnectMySql(const char *host,const char *user,const char *pass,const char *db);
    void  DisConnect();
    bool  SelectMySql(const char* szSql,int nColumn,list<string>& lstStr);
   
    //更新:删除、插入、修改
    bool  UpdateMySql(const char* szSql);
 
private:
    MYSQL *sock;   
	MYSQL_RES *results;   
	MYSQL_ROW record; 
   
};

CMysql.cpp

#include "CMySql.h"


CMySql::CMySql(void)
{
    /*这个函数用来分配或者初始化一个MYSQL对象,用于连接mysql服务端。
    如果你传入的参数是NULL指针,它将自动为你分配一个MYSQL对象,
    如果这个MYSQL对象是它自动分配的,那么在调用mysql_close的时候,会释放这个对象*/
    sock = new MYSQL;
    mysql_init(sock );
    mysql_set_character_set(sock,"utf8"); //gb2312 中华人民共和国简体字标准
}


CMySql::~CMySql(void)
{
    if(sock)
    {
        delete sock;
        sock = NULL;
    }
    
}

void CMySql::DisConnect()
{
    mysql_close(sock);
}

bool CMySql::ConnectMySql(const char *host,const char *user,const char *pass,const char *db)
{
   //localhost   127.0.0.1
   
	if (!mysql_real_connect(sock, host, user, pass, db, 0, NULL, 0))
	{
        //连接错误
		return false;
	}
	
    return true;
}

bool CMySql::SelectMySql(const char* szSql,int nColumn,list<string>& lstStr)
{
    //mysql_query() 函数用于向 MySQL 发送并执行 SQL 语句
     if(mysql_query(sock,szSql))return false;

     /*·mysql_store_result 对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等)
     返回值:
     . CR_COMMANDS_OUT_OF_SYNC   以不恰当的顺序执行了命令。
   · CR_OUT_OF_MEMORY   内存溢出。
   · CR_SERVER_GONE_ERROR   MySQL服务器不可用。
   · CR_SERVER_LOST   在查询过程中,与服务器的连接丢失。
   · CR_UNKNOWN_ERROR   出现未知错误。*/
	results=mysql_store_result(sock);
    if(NULL == results)return false;
    //获取第一行
	while (record = mysql_fetch_row(results))
	{
        //遍历列
		 for(int i = 0;i < nColumn;i++)
         { 
			 if(NULL == record[i])
			 {
                 record[i] = (char*)"null";
			 }
             lstStr.push_back(record[i]);
         }
    

	}

    return true;
}

 bool  CMySql::UpdateMySql(const char* szSql)
 {
    if(!szSql)return false;

    if(mysql_query(sock,szSql))return false;

    return true;
 }


二、测试使用

Qt的pro 文件

QT = core

CONFIG += c++17 cmdline

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


include(./mysql/mysql.pri)

main.cpp

#include <QCoreApplication>
#include "mysql/CMySql.h"
#include <QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    CMySql sql;          //ip,       用户名, 密码,    数据库
    if(sql.ConnectMySql("localhost","root","123456","0814test")){

          qDebug()<<"connect sql success";
        char szsql[100] = "select snum,sname,sage from student";
          list<string> lststr;
          sql.SelectMySql(szsql,3,lststr);
          while(lststr.size() >0){
              string strNum = lststr.front();
              lststr.pop_front();
              string strName = lststr.front();
              lststr.pop_front();
              string strAge = lststr.front();
              lststr.pop_front();
              qDebug()<<strNum.c_str()<<":"<<strName.c_str()<<":"<<strAge.c_str();

          }
//        char szsql[100] = "insert into student(snum,sname) values(12,'test');";
//          if(sql.UpdateMySql(szsql)){
//              qDebug()<<"insert sql success";
//          }else{
//               qDebug()<<"insert sql err";
//          }
    }
    else
       qDebug()<<"connect sql err";
    return a.exec();
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的小猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值