C++ MySQL编程
MySQL编程需要包含<mysql.h>头文件。该文件一般在MySQL安装目录下的include文件夹下。
包含头文件还不够,还需要包含“libmysql.lib”库,一般在lib文件夹下。
MySQL编程与Socket编程非常相似,唯一不同的是MySQL使用的是MYSQL结构体,而Socket使用的是SOCKET。因此需要先构建一个MYSQL结构体并初始化(mysql_init),使用完后需要释放该结构体(mysql_close)。
函数详情可查看MYSQL参考手册
下载地址:链接:https://pan.baidu.com/s/1qZ96XtU 密码:zk5l
// MySQL.h
#ifndef C_MYSQL_H // 防止多次包含
#define C_MYSQL_H // 导出/导入函数
#ifdef MYSQL_EXPORTS
#define MYSQLAPI __declspec(dllexport)
#else
#define MYSQLAPI __declspec(dllimport)
#endif // 头文件
#include "stdafx.h"
#include <WinSock2.h>
#include "X:\\Program Files\\MySQL\\MySQL Server 5.5\\include\\mysql.h"
#include <string>
using std::string; #pragma comment(lib, "libmysql.lib")// 链接动态库
#pragma warning(disable:4251)// 屏蔽编译警告
#pragma warning(disable:4267)
#pragma warning(disable:4244) class MYSQLAPI CMySQL
{
public:
CMySQL();
virtual ~CMySQL(); public:
// 返回错误描述
string GetErrorDesc(__in int nErrorID); // 返回错误ID
int GetErrorID(); // 连接MySQL数据库
bool Connect(__in string szIpAddr/*Ip地址*/, __in unsigned int unPort/*端口号*/,
__in string szUser/*用户名*/, __in string szPass/*密码*/, __in string szDatabase/*库名称*/); // 向数据库发送指令
bool Command(__in string szComm); // 接收结果
virtual bool Result(__out string **pOutBuf, __out int *pNum);
protected:
MYSQL *m_pMySQL;
int m_nErrorID;
}; #endif // C_MYSQL_H
// MySQL.cpp
// MySQL.cpp : 定义 DLL 应用程序的导出函数。
// #include "stdafx.h"
#include "MySQL.h" // 构造函数
CMySQL::CMySQL()
{
m_nErrorID = 0;
m_pMySQL = new MYSQL;
mysql_init(m_pMySQL); // 初始化MySQL结构
} // 析构函数
CMySQL::~CMySQL()
{
// 销毁MySQL结构
mysql_close(m_pMySQL);
delete m_pMySQL;
m_pMySQL = NULL;
} // 返回错误描述
string CMySQL::GetErrorDesc(__in int nErrorID)
{
switch (nErrorID)
{
case 0:
return "执行成功";
case -1:
return "参数错误";
case -2:
return "无数据";
default:
return mysql_error(m_pMySQL);
}
} // 返回错误ID
int CMySQL::GetErrorID()
{
int nTemp = m_nErrorID;
m_nErrorID = 0;
return nTemp;
} // 连接MySQL数据库
bool CMySQL::Connect(__in string szIpAddr, __in unsigned int unPort, __in string szUser, __in string szPass, __in string szDatabase)
{
if (szIpAddr.empty() || unPort <= 1024/*1024以下端口是操作系统预留端口,不可占用*/ || szUser.empty() || szPass.empty() || szDatabase.empty())
{
m_nErrorID = -1;
return false;
} // 连接MySQL服务器
if (!mysql_real_connect(m_pMySQL, szIpAddr.c_str(), szUser.c_str(), szPass.c_str(), szDatabase.c_str(), unPort, NULL, 0))
{
m_nErrorID = mysql_errno(m_pMySQL);
return false;
}
return true;
} // 向数据库发送指令
bool CMySQL::Command(__in string szComm)
{
if (szComm.empty()){
m_nErrorID = -1;
return false;
}
int nRet = mysql_real_query(m_pMySQL, szComm.c_str(), szComm.length());
if (nRet == 0)return true;
else {
m_nErrorID = nRet;
return false;
}
} // 接收结果
bool CMySQL::Result(__out string **pOutBuf, __out int *pNum)
{
if (!pOutBuf || !pNum)// 检查参数
{
m_nErrorID = -1;
return false;
}
MYSQL_RES *pRes = mysql_store_result(m_pMySQL);
if (!pRes) // 检查结果集
{
m_nErrorID = -2;
return false;
}
int nDataNumber = pRes->data->rows;// 有多少条(行)数据
if (nDataNumber < 1) // 检查有没有数据
{
m_nErrorID = -2;
return false;
}
string* pszRecvResult = new string[nDataNumber];
MYSQL_ROW row;
unsigned int nIndex = 0;
while (row = mysql_fetch_row(pRes))// 检索结果集
{
int nResultRowNumber = mysql_num_fields(pRes);// 获取结果集的行数
for (int i = 0; i < nResultRowNumber; i++)
{
pszRecvResult[nIndex] += row[i];
pszRecvResult[nIndex] += "\t";
}
nIndex++;
}
mysql_free_result(pRes); // 释放结果集
*pOutBuf = pszRecvResult;
*pNum = nDataNumber;
return true;
}
(本人文化水平有限,写得不好还请不要介意!)
C++ MySQL编程的更多相关文章
- Visual C++ 2008进行MySQL编程
visual c++ 2008进行MySQL编程(ODBC) -- (一) 套装安装 visual c++ 2008进行MySQL编程(ODBC) --(二) CDatabase操作数据库 visua ...
- MySQL编程基础
本文是关于MySQL编程中的一些基础知识,包括变量和运算符.常用语句.函数. 一.变量与运算符 1.用户会话变量声明:SET @变量名 = 表达式;//即:用户会话变量无需提前定义,直接用赋值语句赋值 ...
- MySql——编程
基本语法形式 语句块模式: 在mysql编程中,begin....end;基本代替了原来编程语句中的{...}语法. 但又有所区别: 一个bigin...end;块,可以给定一个“标识符”,并且可以使 ...
- mysql 编程初步
mysql 编程 基本语法形式: 语句块模式 [begin_label] begin [statement_list] end [end_label]; label 标识符可以省略,但必须相同 流程控 ...
- visual c++ 2013进行MySQL编程(ODBC) -- (一) 套装安装
最近写了有些技术类文章了,只因为最近研究多了些东西,有一些项目用到了,所以自己记录一下,怕自己忘记,如果有哪位同学有自己的见解,可以邮件或者回复,技术类的探讨,不管对否,都是欢迎的. 操作之前,必须安 ...
- MySQL编程
MySQL 使用标准 SQL 检索和处理数据,体积小.开源.免费,易于快速部署.正是因为这些特点,使得其在互联网行业,特别是 Web 应用方面使用相当广泛.至今最新的版本已到 8.0. 一 基本操作 ...
- python入门编程之mysql编程
python关于mysql方面的连接编程 前提:引入mysql模块MySQLdb,即:MySQL_python-1.2.5-cp27-none-win_amd64.whl 如果要用线程池,则要引用模块 ...
- JAVA / MySql 编程——第八章 DAO 模式
1. 数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2. 持久化的实现方式:数据库.普通文件.XML文件: 3. JDBC封装: ...
- JAVA / MySql 编程——第七章 JDBC
1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力: ●Java是通过JDBC技术实现对各种数据 ...
随机推荐
- VBoxManage安装
扩展包的版本需要与VirtualBox的版本一致,通过帮助可以查看VirtualBox的版本信息,然后在http://download.virtualbox.org/virtualbox/寻找对应的版 ...
- 当 C++ 遇上音乐
前几天在洛谷日报征文中看到了这样一篇文章:C++不止能做题.作为原来校管弦乐队的一名成员,而后因为信息完全放弃了管弦乐队,我看完是又激动又怀念.于是我自行去研究了一下:C++ 如何让蜂鸣器叫出乐曲. ...
- ios高级开发之多线程(二)NSThread技术
多线程技术是有多套解决方案的,那么我们该如何选择呢? 技术方案 简介 语言 线程生命周期 使用频率 pthread 1.一套通用的多线程API 2.适用于UNIX,linux,windows等 3.跨 ...
- C# base64编码、解码
public class TransferCode { #region base-64编码.解码 /// <summary> /// BASE64编码 /// </summary&g ...
- vue入门练习(一)
1.安装node,webpack node -v //查看已安装版本 npm install -g webpack //安装webpack npm install -g webpack-dev-se ...
- ACM-ICPC2018南京赛区 Mediocre String Problem
Mediocre String Problem 题解: 很容易想到将第一个串反过来,然后对于s串的每个位置可以求出t的前缀和它匹配了多少个(EXKMP 或者 二分+hash). 然后剩下的就是要处理以 ...
- [Dababase - MySQL- Linux] 数据库安装位置
数据库安装最好是安装在 usr/local/ 里面,因为默认的很多东西都是指向这个文件夹中的.
- hbase的api操作之过滤器
Comparison Filter: 对比过滤器: 1.RowFilter select * from ns1:t1 where rowkey <= row100 ...
- php单点登录
http://blog.csdn.net/luyaran/article/details/54890036
- 德邦总管 修改oracle数据库用户密码的方法
WIN+R打开运行窗口,输入cmd进入命令行: 输入sqlplus ,输入用户名,输入口令(如果是超级管理员SYS的话需在口令之后加上as sysdba)进入sql命令行: 连接成功后,输入“s ...