最近想寫一個應用程序,要連接和操作mysql數據庫,以前只是用c++ builder 操作過mysql數據庫,那是用控件操作的,感覺比較弱智,但是c++ builder vcl控件感覺在多線程里比較坑,所以用vs2012做了。
c++連接mysql有兩種方式,1是原始的方法,2是用 Connector c++ 。Connector c++ 只是一種封裝,使之更加方便.本方只記下關於 Connector c++ 操作數據庫。
想寫一個demo 測試一下。
mysql connector c++ 調用 方式 有兩種,一種是動態鏈接庫調用 ,一種是靜態庫調用。靜態庫試了一整天不行,都是以 get_mysql_driver_instance() 沒有鏈接到而靠終,后來才知道 新版本的connector c++ 如果以靜態方式調用的話是不再用這個函數了 可是官方文檔中沒有說不用get_mysql_driver_instance這個函數是怎么操作數據庫的。靜態失敗了,搞動態吧。
動態庫調用方式是若干 .h 文件和一個 mysqlcppconn.lib 鏈接之后在運行期間會調用mysqlcppconn.dll貌似運行期間還要調用 libmysql.dll 。
下面說步驟
1.首先把把connector c++ include文件夾 加到工程包含目錄里
2.其次鏈接lib 其中分為debug版和 release 版
#ifdef _DEBUG #pragma comment(lib,"..\\dynamic_lib\\Debug_\\mysqlcppconn.lib") #else #pragma comment(lib,"..\\dynamic_lib\\Release_\\mysqlcppconn.lib") #endif // DEBUG
3.直接調用函數了 ,以下代碼測試正確 vs2012 win7 64位
// TestMySql.cpp : 定義控制台應用程序的入口點。 // #include "stdafx.h" #include "mysql_connection.h" #include "mysql_driver.h" #include "mysql_error.h" #include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h> #include <cppconn/prepared_statement.h> #include <iostream> using namespace std; #ifdef _DEBUG #pragma comment(lib,"..\\dynamic_lib\\Debug_\\mysqlcppconn.lib") #else #pragma comment(lib,"..\\dynamic_lib\\Release_\\mysqlcppconn.lib") #endif // DEBUG int _tmain(int argc, _TCHAR* argv[]) { sql::mysql::MySQL_Driver *driver = NULL; sql::Connection *con = NULL; driver = sql::mysql::get_mysql_driver_instance(); if(driver == NULL) { cout<<"driver is null"<<endl; goto END; } con = driver->connect("tcp://localhost:3306", "root", "3342125"); if(con == NULL) { cout<<"conn is null"<<endl; goto END; } cout<<"連接數據庫成功"<<endl; sql::Statement * stmt = NULL; stmt = con->createStatement(); if(stmt == NULL) { cout<<"stmt is null"<<endl; goto END; } stmt->execute("SET CHARSET GB2312"); stmt->execute("USE zhanbao"); sql::ResultSet * resultSet = stmt->executeQuery("這里寫查詢語句 "); int i = 0; while (resultSet->next()) { cout << ", label = '" << resultSet->getString("ACCOUNT") << "'" << endl; i++; } cout<<"共"<<i<<"條"<<endl; con->close(); delete stmt; delete con; END: system("pause"); return 0; }