最近想写一个应用程序,要连接和操作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; delete driver; END: system("pause"); return 0; }