项目须要,须要用c++链接mysql数据库,这里是官方给出的在VS下的链接步骤:http://dev.mysql.com/doc/refman/5.6/en/connector-cpp-apps-windows-visual-studio.htmlhtml
但我在链接过程当中,发现官网给出的步骤有些问题,现总结个人链接步骤以下,同时指出官网链接教程中的一些出入。mysql
一、下载安装mysql(http://dev.mysql.com/downloads/),安装时注意最好选择安装Connect/c++。严格来讲等到后面再在官网下载单独的Connect/c++安装也行,但我本身安装过程当中发现,在官网中下载的Connect/c++的zip免安装版,解压后里面没有“lib\opt”这个文件夹,而这个里面的内容是咱们后续链接要用的。若下载Connect/c++的.msi安装版本也存在一样的问题。c++
二、下载并解压缩boost库(http://www.boost.org/),mysql Connect/c++ 里用到了智能指针,因此须要boost库。固然,你也能够注释掉Connect/c++里相关头文件里用到boost库的地方,这样就不用智能指针了,不过建议最好保留。sql
三、下面就是相关的环境设置,假设mysql安装目录为C:\Program Files\MySQL; 而boost库的目录为C:\Program Files\boost_1_54_0。我只设置成功了动态连接的配置,静态连接下我没试成。数据库
动态连接windows
动态连接的debug设置和release设置是相同的,具体以下:app
(1)项目属性页,“c/c++”-"常规"-“附加包含目录”添加相关头文件路径:函数
C:\Program Files\boost_1_54_0visual-studio
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
(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; }