vc2010访问局域网mysql_VC2010利用MySQL++访问mysql. 及连接池示例
首先下載并安裝mysql,我使用的為mysql 5.5版本,安裝時注意安裝c++的開發包。
#1? 下載mysql++,解壓,? 找到install.hta, 修改對應路徑,指向vc2008所在路徑,? 生成mysql++ 的lib 至某路徑, 如?d:\mysql++3.10\ include
#2? 打開mysql++ vc2008目錄是mysql++_mysqlpp.sln, 升級到vs2010版本, 因為vs2010去掉了針對整個解決方案修改vc目錄的功能(只能單個項目修改,所以原項目編譯不過)
#3? 視圖》其它窗口》隨意選擇一個項目 ,打開 win32….user節點, 設置vc目錄(include, lib 等),則將應用于整個解決方案, 其它項目將繼承此設置.
A 需要將 mysql安裝目錄的lib 路徑 設置到 vc目錄的lib
B 需要將 mysql安裝目錄的inlucde路徑設置到vc目錄的 包含目錄及引用目錄
C 原解決方案已含了 vc2008上級目錄的lib文件夾,因此不用再行設置。
D 復制libmysql.lib 到某目錄下,此目錄加入到vc目錄的lib
#4 編譯vc2008解決方案,? 將編譯成功的 mysqlpp_d.dll, mysqlpp_d.lib, mysql_excommon.lib 保留。
至此,我們已準備好了 mysql++所需要的頭和庫文件?? d:\mysql++3.10\ include?? 及 第#4步生成的幾個庫文件。
接下來我們將其應用于新的項目中
#1 新建 vc2010項目,? 因為只有單個項目,直接在項目屬性頁里設置vc路徑
A 包含目錄? ,設置為用install.hta生成的路徑, 即上述的 d:\mysql++3.10\include.? 當然還包括mysql安裝目錄下的MySQL Server 5.5\include
B 引用目錄, 同上
C 庫目錄, 同上, 并且增加了 mysql安裝目錄下的 MySQL Server 5.5\lib 目錄。 并且 我將第 #4 步編譯成功的 幾個庫文件復制在了 d:\mysql++3.10\ include目錄下
#2 在項目中增加現有項,加入mysqlpp_d.lib,? mysqlpp_excommon.lib, libmysql.lib
#3 將mysqlpp_d.dll 復制到 c:\windows\system32目錄下
#4 設置項目的link的依賴項, 增加對此三lib文件的依賴 .???? 項目屬性頁>鏈接器>輸入>額外依賴項>libmysql.lib;mysqlpp_d.lib;mysqlpp_excommon.lib;后面是項目默認的win32庫如kernel32.lib之類。
#5 試寫簡單的測試代碼,從 test庫的ta表中輸出記錄.
// tstMYSQL.cpp : 定義控制臺應用程序的入口點。
//
#include"stdafx.h"
#include
#include
#include
using namespacemysqlpp;
using namespace std;
int _tmain(int argc,_TCHAR* argv[])
{
mysqlpp::Connection con(false);
con.connect("test","localhost","root","密碼",3306);
cout<
cout<
mysqlpp::Query query = con.query("select name from ta");
if (mysqlpp::StoreQueryResult res = query.store())
{
cout << "the it members as bellow :" << endl;
for (size_t i = 0; i < res.num_rows(); ++i)
{
cout << '\t' << res[i][0] << endl;
}
}
cout<
cin.get();
con.disconnect();
return 0;
}
至此已完成mysql++訪問mysql的測試。
接下來,試用連接池.?? mysql++提拱了connectionpool的接口, 我們需要對這個虛類的實現。
以下生成CConnectionPool的派生類來進行實現? (參考mysql++示例文檔)
class CConnectionPool : public mysqlpp::ConnectionPool
{
public:
CConnectionPool(
const char* db,
const char* server,
const char* user,
const char* password) :
db_(db ? db : ""),
server_(server ? server : ""),
user_(user ? user : ""),
password_(password ? password : "")
{
}
~CConnectionPool()
{
clear();
}
mysqlpp::Connection* grab()
{
++conns_in_use_;
return mysqlpp::ConnectionPool::grab();
}
void release(const mysqlpp::Connection* pc)
{
mysqlpp::ConnectionPool::release(pc);
--conns_in_use_;
}
protected:
mysqlpp::Connection* create()
{
return new mysqlpp::Connection(
db_.empty() ? 0 : db_.c_str(),
server_.empty() ? 0 : server_.c_str(),
user_.empty() ? 0 : user_.c_str(),
password_.empty() ? "" : password_.c_str());
}
void destroy(mysqlpp::Connection* cp)
{
delete cp;
}
unsigned int max_idle_time()
{
return NULL;
}
private:
//Number of connections currently in use
unsigned int conns_in_use_;
//connection parameters
std::string db_, server_, user_, password_;
};
CConnectionPool* poolptr = 0;
調用示例:
//定義數據庫連接信息
const char* db ="test", *server = "localhost", *user ="root", *pass = "xxxx";
//準備連接池
poolptr = new CConnectionPool(db, server, user, pass);
//從連接池返回一個可用連接
mysqlpp::ScopedConnection cp(*poolptr, true);
cout<
cout<
//利用此連接進行操作
mysqlpp::Query query = cp->query("select name from ta");
if(mysqlpp::StoreQueryResult res = query.store())
{
cout << "the it members as bellow :" << endl;
for (size_t i = 0; i < res.num_rows(); ++i)
{
cout <
}
}
cout<
cin.get();
cp->disconnect();
另外,mysql++里準備了threads.h 用于多線程處理, 可以自行調整 。
關于mysql++的更多操作,請參見mysql++手冊。
總結
以上是生活随笔為你收集整理的vc2010访问局域网mysql_VC2010利用MySQL++访问mysql. 及连接池示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql设置不主动提交无效_关闭事务自
- 下一篇: sierra mysql_macOS H