zoukankan      html  css  js  c++  java
  • VS2010下用c++连接mysql 配置

    项目需要,需要用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免安装版,解压后里面没有“libopt”这个文件夹,而这个里面的内容是我们后续连接要用的。若下载Connect/c++的.msi安装版本也存在同样的问题。

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

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

    动态链接

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

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

               C:Program Filesoost_1_54_0

               C:Program FilesMySQLConnector C++ 1.1.3include

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

               C:Program FilesMySQLConnector C++ 1.1.3libopt

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

               mysqlcppconn.lib

              

      (3)将目录C:Program FilesMySQLConnector C++ 1.1.3libopt下的文件mysqlcppconn.dll(1.1.3版本,该文件大小为582KB),以及目录C:Program FilesMySQLMySQL Server 5.6lib下的文件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 FilesMySQLMySQL Server 5.6include和路径C:Program FilesMySQLMySQL Server 5.6lib,附加依赖项添加libmysql.lib。但我试验过,确实不需要。c++连接mysql的相关头文件都在路径C:Program FilesMySQLConnector C++ 1.1.3include下,并不需要再添加C:Program FilesMySQLMySQL Server 5.6include下的头文件。此外,运行只需要动态连接libmysql.dll库即可,编译的时候并不需要添加libmysql.lib。

        (2)官网debug和release的配置是不同的,具体分别在附加库目录,debug是添加路径C:Program FilesMySQLConnector C++ 1.1.3libdebug,而release是C:Program FilesMySQLConnector C++ 1.1.3libopt,同时debug下拷贝mysqlcppconn.dll也是拷贝路径C:Program FilesMySQLConnector C++ 1.1.3libdebug下的那个mysqlcppconn.dll文件(1.1.3版本下该文件为966KB),但我试验发现,这样设置debug版本是不能正常运行的。一个奇葩的地方是,我附加库目录用C:Program FilesMySQLConnector C++ 1.1.3libdebug,但mysqlcppconn.dll是拷贝C:Program FilesMySQLConnector C++ 1.1.3libopt下的文件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; }

      

  • 相关阅读:
    有没有开源软件可以批量安装操作系统
    MarkMan – 马克鳗,让设计更有爱!
    Tomboy : Simple note taking
    wikipad这个软件可以深入研究是基于pywebkit linux uubntu 下有分发包
    guard/guardlivereload
    Frequently Asked Questions — Scrapy 0.15.1 documentation
    Tornado Web服务器
    稀疏矩阵的存储格式 之 CSR/CSC
    Zen Coding — a new way of writing HTML and CSS code
    felinx / labs / source — Bitbucket
  • 原文地址:https://www.cnblogs.com/rolling-stone/p/3373744.html
Copyright © 2011-2022 走看看