工程需要加上各个路径:

库使用需要几个文件:
  1、include 文件夹 c/c++ /常规/附加包含目录
   Connector/c++ 的安装版里面的Include 文件夹。或者把 /driver以及/driver/nativeapi 里面的头文件拷贝到一个文件夹里面(注意nativeapi要改名为 cppconn)。
  2、Connector/c++ 库文件 和 MySql库文件:
    2.1、mysqlcppconn.dll /debug,exe生成目录
    2.2、mysqlcppconn.lib 链接器/输入/附加依赖项
    2.3、libmysql.dll    /debug 
  3、boost库所在目录 c/c++/常规/附加包含目录

头文件 MySqlDataBase.h :

#ifndef __MYSQL_DATABASE_H
#define __MYSQL_DATABASE_H #include "mysql_connection.h"
#include "mysql_driver.h"
#include "cppconn/prepared_statement.h"
#include "cppconn/statement.h"
#include <map> typedef boost::scoped_ptr<sql::Connection> Connection;
typedef boost::scoped_ptr<sql::PreparedStatement> PreparedStatement;
typedef boost::scoped_ptr<sql::Statement> Statement;
typedef boost::shared_ptr<sql::ResultSet> ResultSet;
typedef sql::mysql::MySQL_Driver MySQL_Driver; //mysql 错误类
class CMySqlError
{
//存储变量
protected:
int m_ErrorCode;
std::string m_strErrorDescribe; public:
//构造函数
CMySqlError();
//析构函数
~CMySqlError();
public:
//获取ErrorCode
int getErrorCode(){ return m_ErrorCode; }
//错误描述
std::string GetErrorDestribe(){ return m_strErrorDescribe; } public:
//设置错误
void SetErrorInfo(sql::SQLException &e);
}; class CMySqlDataBase
{
//信息变量
protected:
CMySqlError m_MySqlError; //当前错误信息
std::map<std::string, std::string> m_ConnectProperties; //连接信息 //状态变量
protected:
const unsigned int m_dwTryConnectTimes; //连接变量
protected:
Connection m_DBConnect;
PreparedStatement m_DBPrepareState;
ResultSet m_DBRecordSet; //函数定义
public:
//构造函数
CMySqlDataBase();
//析构函数
~CMySqlDataBase(); //管理接口
public:
//打开连接
bool OpenConnect();
//关闭记录
bool CloseRecordset();
//关闭连接
bool CloseConnect();
//重新连接(未实现)
bool TryConnectAgain();
//设置信息
bool SetConnectionInfo(const std::string &hostIp,unsigned short hostPort,const std::string &dataBaseName,const std::string &userName,const std::string &password); //状态接口(未实现)
public:
//是否连接错误
bool IsConnectError();
//是否打开
bool IsRecordsetOpened(); //
public:
//准备prepareState
bool PreparedExcute(const std::string &szCommand); bool setBigInt(unsigned int parameterIndex, const std::string& value); bool setBlob(unsigned int parameterIndex, std::istream * blob); //长文本字符串 bool setBoolean(unsigned int parameterIndex, bool value); bool setDateTime(unsigned int parameterIndex, const std::string& value); bool setDouble(unsigned int parameterIndex, double value); bool setInt(unsigned int parameterIndex, int32_t value); bool setUInt(unsigned int parameterIndex, uint32_t value); bool setInt64(unsigned int parameterIndex, int64_t value); bool setUInt64(unsigned int parameterIndex, uint64_t value); bool setString(unsigned int parameterIndex, const std::string& value); bool setNull(unsigned int parameterIndex, int sqlType); //执行命令(存储过程)
bool ExecuteCommand(bool bRecordset); //执行语句接口
public:
//执行查询(Select)
bool Query(const std::string &szCommand);
//执行语句(Insert,Update,Delete)
bool Execute(const std::string &szCommand); //字段接口
/* next() must been used before getdata */
public:
//获取当前 Result set
const ResultSet &GetRecordSet();
//get Next Record set
bool GetNextResultSet();
//move resultset to the nth result in the set
bool NextFieldExist();
//获取参数
bool GetFieldValue(const std::string& columnLabel,bool &bValue);
//获取参数
bool GetFieldValue(const std::string& columnLabel,long double &dbValue);
//获取参数
bool GetFieldValue(const std::string& columnLabel,int32_t &nValue);
//获取参数
bool GetFieldValue(const std::string& columnLabel,uint32_t &uValue);
//获取参数
bool GetFieldValue(const std::string& columnLabel,int64_t &llValue);
//获取参数
bool GetFieldValue(const std::string& columnLabel,uint64_t &lluValue);
//获取参数
bool GetFieldValue(const std::string& columnLabel,char szBuffer[],uint32_t uSize);
//获取参数
bool GetFieldValue(const std::string& columnLabel,std::string &szValue);
//获取参数
//bool GetFieldValue(const std::string& columnLabel,SYSTEMTIME &systime); //内部函数
private:
//设置错误
void SetErrorInfo(sql::SQLException &e);
}; #endif

源文件MySqlDataBase.cpp

#include "MySqlDataBase.h"
#include <sstream> CMySqlError::CMySqlError()
{
} CMySqlError::~CMySqlError()
{
} void CMySqlError::SetErrorInfo(sql::SQLException &e)
{
m_ErrorCode = e.getErrorCode();
m_strErrorDescribe = e.what(); throw this;
} CMySqlDataBase::CMySqlDataBase():m_DBConnect(NULL),m_DBPrepareState(NULL),m_DBRecordSet((sql::ResultSet*)NULL),m_dwTryConnectTimes()
{
} CMySqlDataBase::~CMySqlDataBase()
{
try
{
CloseConnect(); m_DBRecordSet.reset((sql::ResultSet*)NULL);
m_DBPrepareState.reset(NULL);
m_DBConnect.reset(NULL);
}
catch(sql::SQLException &e) { SetErrorInfo(e);}
} //设置错误
void CMySqlDataBase::SetErrorInfo(sql::SQLException &e)
{
m_MySqlError.SetErrorInfo(e);
} //打开连接
bool CMySqlDataBase::OpenConnect()
{
//建立连接
try
{
sql::mysql::MySQL_Driver *driver = sql::mysql::get_mysql_driver_instance(); m_DBConnect.reset(driver->connect(m_ConnectProperties["hostName"],m_ConnectProperties["userName"],m_ConnectProperties["password"]));
m_DBConnect->setSchema(m_ConnectProperties["schema"]);
}
catch(sql::SQLException &e) { SetErrorInfo(e);} return true;
} //关闭记录
bool CMySqlDataBase::CloseRecordset()
{
try
{
if(m_DBPrepareState != NULL)
{
while(m_DBPrepareState->getMoreResults())
m_DBRecordSet.reset(m_DBPrepareState->getResultSet()); m_DBPrepareState.reset(NULL);
} if(m_DBRecordSet != NULL)
m_DBRecordSet.reset((sql::ResultSet*)NULL);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //关闭连接
bool CMySqlDataBase::CloseConnect()
{
try
{
CloseRecordset(); //close connect
if(m_DBConnect != NULL)
{
m_DBConnect.reset(NULL);
} return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //设置信息
bool CMySqlDataBase::SetConnectionInfo(const std::string &hostIp,unsigned short hostPort,const std::string &dataBaseName,const std::string &userName,const std::string &password)
{
try
{
std::stringstream hostss;
hostss<<"tcp://"<<hostIp<<":"<<hostPort; m_ConnectProperties["hostName"] = hostss.str();
m_ConnectProperties["userName"] = userName;
m_ConnectProperties["password"] = password;
m_ConnectProperties["schema"] = dataBaseName; return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //是否打开
bool CMySqlDataBase::IsRecordsetOpened()
{
if(m_DBRecordSet == NULL)
return false; if(m_DBRecordSet->isClosed())
return false; return true;
} //准备prepareState
bool CMySqlDataBase::PreparedExcute(const std::string &szCommand)
{
if(szCommand.empty()) return false; //close RecordSet;
CloseRecordset();
try
{
m_DBPrepareState.reset(m_DBConnect->prepareStatement(szCommand));
m_DBPrepareState->clearParameters(); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setBigInt(unsigned int parameterIndex, const std::string& value)
{
try
{
m_DBPrepareState->setBigInt(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setBlob(unsigned int parameterIndex, std::istream * value) //长文本字符串
{
try
{
m_DBPrepareState->setBlob(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setBoolean(unsigned int parameterIndex, bool value)
{
try
{
m_DBPrepareState->setBoolean(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setDateTime(unsigned int parameterIndex, const std::string& value)
{
try
{
m_DBPrepareState->setDateTime(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setDouble(unsigned int parameterIndex, double value)
{
try
{
m_DBPrepareState->setDouble(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setInt(unsigned int parameterIndex, int32_t value)
{
try
{
m_DBPrepareState->setInt(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setUInt(unsigned int parameterIndex, uint32_t value)
{
try
{
m_DBPrepareState->setUInt(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setInt64(unsigned int parameterIndex, int64_t value)
{
try
{
m_DBPrepareState->setInt64(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setUInt64(unsigned int parameterIndex, uint64_t value)
{
try
{
m_DBPrepareState->setUInt64(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setString(unsigned int parameterIndex, const std::string& value)
{
try
{
m_DBPrepareState->setString(parameterIndex,value); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} bool CMySqlDataBase::setNull(unsigned int parameterIndex, int sqlType)
{
try
{
m_DBPrepareState->setNull(parameterIndex,sqlType); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //执行命令(存储过程)
bool CMySqlDataBase::ExecuteCommand(bool bRecordset)
{
try
{
m_DBPrepareState->executeUpdate(); if(bRecordset)
m_DBRecordSet.reset(m_DBPrepareState->getResultSet()); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //执行查询(Select)
bool CMySqlDataBase::Query(const std::string &szCommand)
{
if(szCommand.empty()) return false; //close RecordSet;
CloseRecordset();
try
{
m_DBPrepareState.reset(m_DBConnect->prepareStatement(szCommand)); m_DBPrepareState->executeUpdate();
m_DBRecordSet.reset(m_DBPrepareState->getResultSet());
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //执行语句(Insert,Update,Delete)
bool CMySqlDataBase::Execute(const std::string &szCommand)
{
if(szCommand.empty()) return false; //close RecordSet;
CloseRecordset();
try
{
m_DBPrepareState.reset(m_DBConnect->prepareStatement(szCommand));
m_DBPrepareState->executeUpdate(); return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取当前 Result set
const ResultSet &CMySqlDataBase::GetRecordSet()
{
return m_DBRecordSet;
} //get Next Record set
bool CMySqlDataBase::GetNextResultSet()
{
if(m_DBPrepareState == NULL)
return false; if(m_DBPrepareState->getMoreResults())
{
m_DBRecordSet.reset(m_DBPrepareState->getResultSet());
return true;
}
return false;
} //next
bool CMySqlDataBase::NextFieldExist()
{
if(m_DBRecordSet == NULL)
return false; return m_DBRecordSet->next();
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,bool &bValue)
{
bValue = false; if(!IsRecordsetOpened())
return false; try
{
bValue = m_DBRecordSet->getBoolean(columnLabel);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,long double &dbValue)
{
dbValue = 0.00; if(!IsRecordsetOpened())
return false; try
{
dbValue = m_DBRecordSet->getDouble(columnLabel);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,int32_t &nValue)
{
nValue = ; if(!IsRecordsetOpened())
return false; try
{
nValue = m_DBRecordSet->getInt(columnLabel);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,uint32_t &uValue)
{
uValue = ; if(!IsRecordsetOpened())
return false; try
{
uValue = m_DBRecordSet->getUInt(columnLabel);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,int64_t &llValue)
{
llValue = ; if(!IsRecordsetOpened())
return false; try
{
llValue = m_DBRecordSet->getInt64(columnLabel);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,uint64_t &lluValue)
{
lluValue = ; if(!IsRecordsetOpened())
return false; try
{
lluValue = m_DBRecordSet->getUInt64(columnLabel);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,char szBuffer[],uint32_t uSize)
{
memset(szBuffer,,uSize); if(!IsRecordsetOpened())
return false; try
{
sql::SQLString tempstr = m_DBRecordSet->getString(columnLabel);
strncpy(szBuffer,tempstr.c_str(),uSize-);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} //获取参数
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,std::string &szValue)
{
if(!IsRecordsetOpened())
return false; try
{
szValue = m_DBRecordSet->getString(columnLabel).asStdString();
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
} /*
//获取参数,SYSTEMTIME 可以通过 COleDateTime(const SYSTEMTIME& systimeSrc) 转换为 COleDateTime
bool CMySqlDataBase::GetFieldValue(const std::string& columnLabel,SYSTEMTIME &systime)
{
if(!IsRecordsetOpened())
return false;
memset(&systime,0,sizeof(SYSTEMTIME));
try
{
std::string timestr = m_DBRecordSet->getString(columnLabel).asStdString();
sscanf(timestr.c_str(),"%04d-%02d-%02d %02d:%02d:%02d",&systime.wYear,&systime.wMonth,&systime.wDay,
&systime.wHour,&systime.wMinute,&systime.wSecond);
return true;
}
catch (sql::SQLException &e) { SetErrorInfo(e);} return false;
}
*/

检查内存增长测试的 leakcheck.h:

#pragma once

#define CRTDBG_MAP_ALLOC
#include <windows.h>
#include <tchar.h>
#include <crtdbg.h>
#include <stdlib.h>
#include <iostream>
#include <Psapi.h>
#pragma comment(lib,"psapi.lib") #ifdef _DEBUG
#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__) #define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif #define DEFAULT_OUT_TITLE \
TEXT("缺页中断数 工作集(KB) 虚存(KB) 虚存峰值(KB)")
#define DEFAULT_OUTPUT_FORMAT \
TEXT(" %u %u %u %u ") // 字节单位转换,向0取整
#define B2KB(x) ((x) >> 10) /////////////////////////////////////////////////////////////////////////////////// void ConstructOutput()
{
PROCESS_MEMORY_COUNTERS pmc;
std::cout<<DEFAULT_OUT_TITLE<<std::endl;
if(!GetProcessMemoryInfo(GetCurrentProcess(),&pmc,sizeof(pmc)))return ; char output[] = {};
_sntprintf(output,sizeof(output),DEFAULT_OUTPUT_FORMAT,
(pmc.PageFaultCount),B2KB(pmc.WorkingSetSize),B2KB(pmc.PagefileUsage),B2KB(pmc.PeakPagefileUsage));
std::cout<<output<<std::endl;
}

调用 test.cpp

#include "MySqlDataBase.h"
#include "leakcheck.h"
using namespace std; int main()
{
CMySqlDataBase mysqldb;
try{
mysqldb.SetConnectionInfo("127.0.0.1",,"test","root","");
mysqldb.OpenConnect();
ConstructOutput();          //这个函数用来查看当前内存大小的
//for(int i = 0;i<100000;++i)
{
mysqldb.PreparedExcute("call testproc1(?)");
mysqldb.setInt(,)
mysqldb.ExecuteCommand(true);
while(mysqldb.NextFieldExist())
{
int id;
std::string name;
mysqldb.GetFieldValue("id",id);
mysqldb.GetFieldValue("date",name);
cout<<"id:"<<id<<", name:"<<name<<endl;
}
}
ConstructOutput();
mysqldb.CloseConnect();
}
catch(CMySqlError *pSqlError)
{
cout<<pSqlError->getErrorCode()<<":"<<pSqlError->GetErrorDestribe()<<endl;
mysqldb.CloseConnect();
} return ;
}

MySql C++调用库Connector/c++编译 和 接口封装【三】Connector/c++ 使用总结及封装的更多相关文章

  1. MySql C++调用库Connector/c++编译 和 接口封装【一】mysql数据库安装

    Connector/c++库的源文件编译,你需要先准备好以下工具:     mysql数据库(编译时要依赖),boost库,cmake(生成sln工程文件),connector/c++的源文件,vis ...

  2. MySql C++调用库Connector/c++编译 和 接口封装【二】Connector/c++编译

    二.Connector/c++库的编译:     1.把MySql数据库安装完成后,把bin目录加入环境变量.          2.下载boost库,官网就有下载: http://www.boost ...

  3. Qt4编译生成VS静态库(静态编译),有三个bat文件 good

    开发环境:vs2008+Qt4.8.4源码库 其他环境请自己尝试,原理应该是差不多的 Qt编译生成静态库 1.         本教程只针对在win32平台,使用VS开发工具(例子以VS2008为例) ...

  4. MySQL从删库到跑路_高级(三)——视图

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.视图简介 1.视图简介 视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式.视图包含 ...

  5. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  6. mysql数据库从库同步延迟的问题

    在从服务器上执行show slave status;可以查看到很多同步的参数,我们需要特别注意的参数如下,希望文章对各位会有所帮助. 在从服务器上执行show slave status;可以查看到很多 ...

  7. MySQL 实现调用外部程序和系统命令

    MySQL 实现调用外部程序和系统命令 Refer:http://www.cnblogs.com/yunsicai/p/4080864.html1) Download lib_mysqludf_sys ...

  8. lua连接数据库之luasql ------ luasql连接mysql数据库 及 luasql源码编译

    lua连接数据库不只luasql这个库,但目前更新最快的的貌似是这个luasql,他是开源的,支持的数据库功能如下: Connect to ODBC, ADO, Oracle, MySQL, SQLi ...

  9. 友盟推送 .NET (C#) 服务端 SDK rest api 调用库

    友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...

随机推荐

  1. PO_标准内部请购内部采购单抛转订单模组(流程)

    2014-06-03 Created By BaoXinjian

  2. [Android开发那点破事]解决android.os.NetworkOnMainThreadException

    [Android开发那点破事]解决android.os.NetworkOnMainThreadException 昨天和女朋友换了手机,我的iPhone 4S 换了她得三星I9003.第一感觉就是好卡 ...

  3. 如何发布打包并发布自己的Android应用(APP)

    如何将android项目打包成apk 分类: android 2012-08-29 10:12 1678人阅读 评论(1) 收藏 举报 androideclipseapplicationjdkjava ...

  4. Linux内核配置解析 - 概述(基于ARM64架构)

    1. 前言 对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?. 话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手:从源代码的目录结构入手:从k ...

  5. 【转载】Gradle构建多模块项目

    本文转载自:https://yq.aliyun.com/articles/25589写的非常好! 改动如下: 1. 增加了一些[补充说明]. 2. 将执行命令使用较为显眼的博客园样式. 3. 将输出结 ...

  6. 温故而知新 gulp.src 指定数组文件夹

    gulp.src语法是基于这个库来实现的,所以详情请看这个API: https://www.gulpjs.com.cn/docs/api/ https://github.com/isaacs/node ...

  7. laravel的模型和数据库基础操作

    laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\Support\Facades\ ...

  8. ios网络层优化深入浅出

    网络层是iOS开发必须掌握的部分,苹果已经将网络请求封装得非常易用了,看看NSURLRequest和NSURLConnection的文档,你就知道怎么用了,这里我就不细讲了.本文主要讲网络层的调用逻辑 ...

  9. 配置 Sliverlight 跨域访问策略

    Silverlight程序在访问非本域资源时,需要在相应的域根目录下建立跨域访问策略文件才能进行访问. 文件名:clientaccesspolicy.xml 文件内容: <?xml versio ...

  10. sliverlight资源文件的URI调用

    这里主要介绍三种方式:1.将文件编译进dll:2.打包在XAP中:3.放在XAP包外,其所在目录下. 这里就将三张图片以不同的方式调用来作为例子: 一.编译进DLL 默认情况下,复制到项目中的资源都是 ...