项目需要,需要用c++连接mysql数据库,这里是官方给出的在VS下的连接步骤:http://dev.mysql.com/doc/refman/5.6/en/connector-cpp-apps-windows-visual-studio.html

但我在连接过程中,发现官网给出的步骤有些问题,现总结我的连接步骤如下,同时指出官网连接教程中的一些出入。

1、下载安装mysql(http://dev.mysql.com/downloads/),安装时注意最好选择安装Connect/c++。严格来说等到后面再在官网下载单独的Connect/c++安装也行,但我自己安装过程中发现,在官网中下载的Connect/c++的zip免安装版,解压后里面没有“lib\opt”这个文件夹,而这个里面的内容是我们后续连接要用的。若下载Connect/c++的.msi安装版本也存在同样的问题。

2、下载并解压缩boost库(http://www.boost.org/),mysql Connect/c++ 里用到了智能指针,所以需要boost库。当然,你也可以注释掉Connect/c++里相关头文件里用到boost库的地方,这样就不用智能指针了,不过建议最好保留。

3、下面就是相关的环境设置,假设mysql安装目录为C:\Program Files\MySQL; 而boost库的目录为C:\Program Files\boost_1_54_0。我只设置成功了动态链接的配置,静态链接下我没试成。

动态链接

     动态链接的debug设置和release设置是相同的,具体如下:

   (1)项目属性页,“c/c++”-"常规"-“附加包含目录”添加相关头文件路径:

           C:\Program Files\boost_1_54_0

           C:\Program Files\MySQL\Connector C++ 1.1.3\include

   (2)项目属性页,“链接器”-“常规”-“附加库目录”添加库文件mysqlcppconn.lib的路径

           C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt

         “链接器”-“输入”-“附加依赖项”添加库文件

           mysqlcppconn.lib

          

mysql vs 连接 vs2010连接mysql数据库_c/c++

  (3)将目录C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt下的文件mysqlcppconn.dll(1.1.3版本,该文件大小为582KB),以及目录C:\Program Files\MySQL\MySQL Server 5.6\lib下的文件libmysql.dll,拷贝到工程的debeg(或者release)目录下。

    通过以上步骤,就完成了c++动态链接mysql的基本环境配置,可在官网找相关示例(http://dev.mysql.com/doc/refman/5.6/en/connector-cpp-examples-complete-example-1.html)直接测试。

     和官网给出的步骤的不同点:

    (1)官网是要求在附加包含目录和附加库目录里分别添加路径C:\Program Files\MySQL\MySQL Server 5.6\include和路径C:\Program Files\MySQL\MySQL Server 5.6\lib,附加依赖项添加libmysql.lib。但我试验过,确实不需要。c++连接mysql的相关头文件都在路径C:\Program Files\MySQL\Connector C++ 1.1.3\include下,并不需要再添加C:\Program Files\MySQL\MySQL Server 5.6\include下的头文件。此外,运行只需要动态连接libmysql.dll库即可,编译的时候并不需要添加libmysql.lib。

    (2)官网debug和release的配置是不同的,具体分别在附加库目录,debug是添加路径C:\Program Files\MySQL\Connector C++ 1.1.3\lib\debug,而release是C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt,同时debug下拷贝mysqlcppconn.dll也是拷贝路径C:\Program Files\MySQL\Connector C++ 1.1.3\lib\debug下的那个mysqlcppconn.dll文件(1.1.3版本下该文件为966KB),但我试验发现,这样设置debug版本是不能正常运行的。一个奇葩的地方是,我附加库目录用C:\Program Files\MySQL\Connector C++ 1.1.3\lib\debug,但mysqlcppconn.dll是拷贝C:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt下的文件mysqlcppconn.dll(1.1.3版本,该文件大小为582KB),却能正常运行。。完全石化了

 

静态链接

   静态链接,区别就是不需要拷贝mysqlcppconn.dll到工程目录,同时将附加依赖项mysqlcppconn.lib改为mysqlcppconn-static.lib,另外需要在”c/c++“-"预处理器"-”预处理器定义“中添加一行”CPPCONN_PUBLIC_FUNC=“,但我按照上面这些做了,还是出现无法解析相关库函数的链接错误,不明所以。有待以后有空慢慢研究。

 

附上测试代码



#include "stdafx.h"
#include <mysql_connection.h>  
#include <cppconn/driver.h>  
#include <cppconn/exception.h>  
#include <cppconn/resultset.h>  
#include <cppconn/statement.h> 

using namespace std;  

int _tmain(int argc, _TCHAR* argv[])
{
	try {  
		sql::Driver *driver;  
		sql::Connection *con;  
		sql::Statement *stmt;  
		sql::ResultSet *res;  
		sql::PreparedStatement *pstmt;
		
		driver = get_driver_instance();  
		con = driver->connect("localhost", "user_name", "password");  
		//选择要连接的数据库  
		con->setSchema("test"); 
         //设置字符格式
		con->setClientOption("characterSetResults", "utf8");
		stmt = con->createStatement();  
		res = stmt->executeQuery("SELECT * from user");  
		//遍历结果集  
		while (res->next())   
		{  
			//这里的ID是user表中的字段名
			int id = res->getInt("ID");
			cout<<id<<endl;
			

		} 
		delete res;  
		delete stmt;
		delete con;  
	} catch (sql::SQLException &e) {  
		//有异常的情况下,输出异常  
		cout << "# ERR: SQLException in " << __FILE__;  
		cout << "(" << __FUNCTION__ << ") on line "   
			<< __LINE__ << endl;  
		cout << "# ERR: " << e.what();  
		cout << " (MySQL error code: " << e.getErrorCode();  
		cout << ", SQLState: " << e.getSQLState() << " )" << endl;  
	}  
	return 0;
}