c++ 操作Mysql ado
#pragma once
#ifndef DB_MYSQL_H
#define DB_MYSQL_H
#include "stdafx.h"
#include <winsock2.h>
#include "include/mysql.h"
#include <map>
#include <vector>
#include <iostream>
using namespace std;
typedef map<CString, CString > strMap;/*key: 字段 value: 值*/
class CDBMYSQL
{
public:
CDBMYSQL(CString szHost, CString szUser, CString szPassword, unsigned int port,CString szCharacter);// 构造函数
CDBMYSQL(); //构造函数
~CDBMYSQL();//析构函数
protected:
MYSQL *m_pMYSQL; //代表一个到数据库的连接
private:
CString m_szHost; //连接的服务器
CString m_szUser; //用户名
CString m_szPassword; //连接密码
CString m_szCharacter;
unsigned int m_iPort; //连接端口
CString m_szDbName; //操作的数据库的名称
MYSQL_RES *m_pResult; //操作的结果
CString m_szQuery; //sql语句
unsigned long m_lNum; //返回查询得到的结果数
CString m_szError; //错误提示信息
unsigned int m_iDebug; //是否显示调试信息
strMap m_Info; //查询语句返回一条结果
vector<strMap> m_vectorInfo; //查询语句可能会返回多条结果
vector<CString> m_vectorFields; //返回查询结果的列
void DisPlayError();
public:
unsigned int DBConnect();//连接数据库
unsigned int DBSelect(CString szDB); //连接一个数据库
void SetQuery(CString szQuery); //设定查询语句
unsigned int DBQuery(); //查询数据库
strMap GetInfo(); //返回查询得到的一条结果
vector<strMap> GetArray(); //返回查询得到的结果
CString GetError(); //返回错误信息
vector<CString> GetFields();//返回查询后的列值
unsigned int InsertData(CString table,strMap *data); //向数据库中插入一条数据
unsigned long GetLastID(); //返回最后一个自动增量的值
unsigned long GetRowNum(); //返回一条sql语句影响的行数
unsigned int UpdateData(CString table,strMap *data,CString condition); //根据条件修改一条数据
unsigned int DeleteData(CString table,CString condition); //根据条件删除数据
};
#endif
哥修改的他人写的一套c++ 操作Mysql ado #include "DBMYSQL.h" CDBMYSQL::CDBMYSQL() { } /*构造函数,设定连接的服务器,用户名,密码和端口*/ CDBMYSQL::CDBMYSQL(CString szHost, CString szUser, CString szPassword, unsigned int iPort=3306, CString szCharacter = "UTF8") { m_pMYSQL = mysql_init(NULL); m_lNum = 0; m_szError=""; m_szQuery=""; m_pResult = NULL; m_szCharacter = szCharacter; CDBMYSQL::m_szHost= szHost; CDBMYSQL::m_szUser= szUser; CDBMYSQL::m_szPassword= szPassword; CDBMYSQL::m_iPort= iPort; CDBMYSQL::m_szCharacter = szCharacter; } /*析构函数*/ CDBMYSQL::~CDBMYSQL() { if(m_pResult != NULL) mysql_free_result(m_pResult); m_vectorFields.clear(); m_szError = ""; m_vectorInfo.clear(); m_szDbName = ""; m_vectorInfo.clear(); mysql_close(m_pMYSQL); } /*连接数据库*/ unsigned int CDBMYSQL::DBConnect() { MYSQL *con; if(m_pMYSQL == NULL) { m_szError = "初始化mysql错误"; return 1; } con = mysql_real_connect(m_pMYSQL, m_szHost.GetBuffer(0), m_szUser.GetBuffer(0), m_szPassword.GetBuffer(0), NULL, m_iPort,NULL,0); if(con == NULL) { m_szError=mysql_error(m_pMYSQL); return mysql_errno(m_pMYSQL); } mysql_set_character_set(m_pMYSQL, m_szCharacter); return 0; } /*选择一个数据库*/ unsigned int CDBMYSQL::DBSelect(CString szDataBase) { unsigned int iRet; if( m_pMYSQL == NULL) return 1; m_szDbName = szDataBase; iRet = mysql_select_db(m_pMYSQL,m_szDbName.GetBuffer(0)); if(iRet != 0) { m_szError += mysql_error(m_pMYSQL); } return iRet; } /*设定sql语句*/ void CDBMYSQL::SetQuery(CString szQuery) { ASSERT(!szQuery.IsEmpty()); if(m_pResult != NULL ) { mysql_free_result(m_pResult); } m_szQuery = szQuery; } /*执行sql语句*/ unsigned int CDBMYSQL::DBQuery() { unsigned int iRet; if( m_pMYSQL == NULL) return 1; ASSERT(!m_szQuery.IsEmpty()); iRet = mysql_query(m_pMYSQL,m_szQuery.GetBuffer()); if(iRet == 0) { m_pResult = mysql_store_result(m_pMYSQL); m_lNum = mysql_affected_rows(m_pMYSQL); m_Info.clear(); m_vectorInfo.clear(); m_vectorFields.clear(); } else { iRet = mysql_errno(m_pMYSQL); m_szError = mysql_error(m_pMYSQL); cout<<m_szError<<endl; } return iRet; } /*获取查询得到的一条结果*/ strMap CDBMYSQL::GetInfo() { MYSQL_ROW row; unsigned int i; ASSERT(m_pMYSQL != NULL); if(m_Info.size() > 0) return m_Info; if(m_pResult != NULL) { GetFields(); row = mysql_fetch_row(m_pResult); if(row != NULL) for(i=0;i<m_vectorFields.size();i++) m_Info[m_vectorFields[i]] = (char*)row[i]; } return m_Info; } /*获取查询得到的所有结果*/ vector<strMap> CDBMYSQL::GetArray() { MYSQL_ROW row; unsigned int i; strMap tmp; ASSERT(m_pMYSQL != NULL); if(m_vectorInfo.size() > 0) return m_vectorInfo; if(m_pResult != NULL) { GetFields(); while(row = mysql_fetch_row(m_pResult)) { if(row != NULL) { for(i=0;i<m_vectorFields.size();i++) { tmp[m_vectorFields[i]] = (char *)row[i]; } m_vectorInfo.push_back(tmp); } } } return m_vectorInfo; } /*获取sql语句执行影响的行数*/ unsigned long CDBMYSQL::GetRowNum() { return m_lNum; } /*获取插入后的id号*/ unsigned long CDBMYSQL::GetLastID() { return mysql_insert_id(m_pMYSQL); } /*向数据库插入数据*/ unsigned int CDBMYSQL::InsertData(CString szTable,strMap *pData) { strMap::const_iterator iter; CString szQuery; int iFlag=0; ASSERT(m_pMYSQL != NULL); ASSERT(!szTable.IsEmpty()); ASSERT(pData != NULL); for(iter = pData->begin(); iter!= pData->end(); iter++) { if(iFlag == 0) { szQuery = "insert into "; szQuery += szTable; szQuery += " set "; szQuery += iter->first; szQuery += " = '"; szQuery += iter->second; szQuery += "'"; iFlag++; } else { szQuery += ","; szQuery += iter->first; szQuery += "= '"; szQuery += iter->second; szQuery += "'"; } } SetQuery(szQuery); return DBQuery(); } /*根据条件修改数据*/ unsigned int CDBMYSQL::UpdateData(CString szTable, strMap *pDataMap, CString szCondition) { strMap::const_iterator iter; CString szQuery; int iFlag = 0; ASSERT(m_pMYSQL != NULL); ASSERT(!szTable.IsEmpty()); ASSERT(pDataMap != NULL); for(iter = pDataMap->begin(); iter!= pDataMap->end(); iter++) { if(iFlag == 0) { szQuery = " update "; szQuery += szTable; szQuery += " set "; szQuery += iter->first; szQuery += " = '"; szQuery += iter->second; szQuery += "'"; iFlag++; } else { szQuery += ","; szQuery += iter->first; szQuery += "='"; szQuery += iter->second; szQuery += "'"; } } if(szCondition.IsEmpty() != 0) { szQuery += " where "; szQuery += szCondition; } SetQuery(szQuery); return DBQuery(); } /*根据条件删除数据*/ unsigned int CDBMYSQL::DeleteData(CString szTable, CString szCondition) { CString szQuery; ASSERT(m_pMYSQL != NULL); ASSERT(!szTable.IsEmpty()); szQuery = " delete from "; szQuery += szTable; if(szCondition!="") { szQuery += " where "; szQuery += szCondition; } SetQuery(szQuery); return DBQuery(); } /*获取返回的错误信息*/ CString CDBMYSQL::GetError() { return m_szError; } /*返回查询后的列值*/ vector<CString> CDBMYSQL::GetFields() { MYSQL_FIELD *field; ASSERT(m_pMYSQL != NULL); if(m_vectorFields.size()>0) return m_vectorFields; while(field = mysql_fetch_field(m_pResult)) m_vectorFields.push_back(field->name); return m_vectorFields; } // 查询 CDBMYSQL *pDbMySQL = new CDBMYSQL("127.0.0.1", "root", "root", 3306, "gbk"); pDbMySQL->DBConnect(); pDbMySQL->DBSelect("demo"); pDbMySQL->SetQuery("select * from customer"); pDbMySQL->DBQuery(); vector<strMap> info = pDbMySQL->GetArray(); for (int i = 0; i < info.size(); i++) { TRACE("username = %s solution =%s \r\n", info[i]["id"], info[i]["username"]); } strMap map; map["username"] = "xs强"; map["company"] = "xxx投资"; pDbMySQL->UpdateData("customer",&map,"where id = 1"); map["id"] = "3"; map["username"] = "邵学成"; map["company"] = "xzxxx投资有限公司"; map["solutation"] = "先生"; map["phone"] = "136401273005"; map["mobile"] = "13640123005"; map["source"] = "同事"; map["sdate"] = "2011-11-1"; map["job"] = "程序员"; map["web"] = "71945221120"; map["email"] = "topxuh12enghua1@163.com"; map["createtime"] = "2010-11-04 21:11:59"; map["modifiedtime"] = "2010-11-04 21:11:59"; map["note"] = "一sx"; pDbMySQL->InsertData("customer",&map); pDbMySQL->DeleteData("customer"," id=1"); |
c++ 操作Mysql ado的更多相关文章
- .NET Core 使用Dapper 操作MySQL
MySQL官方驱动:http://www.cnblogs.com/linezero/p/5806814.html .NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使 ...
- Code First操作Mysql数据库
前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...
- 通过EntityFramework来操作MySQL数据库
自己首次用到了EF,为了利人利己,故将自己今天学的记录下来. 这个项目要用到的工具是VS2015.MySQL5.7.12 . 首先我们先建一个解决方案,里面建两个项目分别是Silentdoer.Mai ...
- C++操作mysql方法总结(2)
C++通过ODBC和通过MFC ODBC操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍 ...
- 使用VS2013操作MYSQL8 (ADO.NET方式 & EF6)
今天有时间测试了一下通过.net环境操作MYSQL数据库,测试过程及结果记录如下: 1.MYSQL安装 (1)我是从MYSQL官网下载的最新版,即MYSQL8.0,在MySql官网的下载页面,找到“M ...
- C++操作Mysql数据库/Linux下
本文链接:https://blog.csdn.net/Tanswer_/article/details/72796570想用C++写项目,数据库是必须的,所以这两天学了一下C++操作Mysql数据库的 ...
- Powershell操作MySQL
最近再用Python写一些监控脚本,并将监控数据输出到MySQL中,最后通过Python抓取MySQL中的数据进行监控汇总告警 考虑到一些微软产品使用Powershell更为方便,于是找了些资料,尝试 ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
随机推荐
- jquery拼接字符串
1. $("#div").append("<table><tr align='center'>" +"<td >& ...
- JQuery 页面加载完成后执行事件
一: $(document).ready(function(){ //code }) 二: jQuery(document).ready(function(){ //code }) 三: window ...
- SCOI 2010 滑雪
题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着 MM 条供滑行的轨道和 NN 个轨道之间的交点(同时也是景点),而且每个景点都有一编号 ii ( 1 \le i \le N1≤i≤N ...
- ccna学习指南第七版
1.加电post自检 闪存查找ios 可随时从命令行进入设置模式,为此可在特权模式下输入setup ctrl+c退出特权模式 6.2cli 命令行界面 进入cli router> ...
- linux 基础 软件的安装 *****
一软件的安装 原代码与tarball 源代码---->编译------>可执行文件 查看文件类型 file命令 是否是二进制文件 注意如果文件的可执行权限 .c结尾的源文件- ...
- jquery trigger
<button id="bt1" class="layui-btn layui-btn-normal"> 点击提交 </button> ...
- 【bzoj4026】dC Loves Number Theory 可持久化线段树
题目描述 dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问,每次询问一段区间内所有元素乘积的φ(φ(n ...
- 【Luogu】P2495消耗战(虚树DP)
题目链接 我虚树没很理解啊qwq 就是我们有比较少的询问点,然后我们把不需要考虑的点搞一搞扔掉,然后每次询问给那些询问点单独建一颗树,然后乱搞. ……好吧看来是完全没理解…… 链接大法qwq #inc ...
- 关于pymongo的一些说明
问题 一: 在pymongo中使用find是得到1个游标对象的,如果你想实现MongoDB shell中find操作,例如: > db.test.find() { "_id" ...
- Repeated Substrings(UVAlive 6869)
题意:求出现过两次以上的不同子串有多少种. /* 用后缀数组求出height[]数组,然后扫一遍, 发现height[i]-height[i-1]>=0,就ans+=height[i]-heig ...