今天想用MySQL Connector 来访问Mysql,记录全过程。
1.下载安装
下载MySQL Connector C++,下载地址:
http://dev.mysql.com/downloads/connector/cpp/
目前最新Windows版本1.1.3;本机环境是windows XP 32位系统,VS 2005开发环境。
安装完成以后,在原来安装Mysql的目录C:\Program Files\MySQL,多出来一个MySQL Connector C++ 1.1.3的文件夹
2.试用MySQL Connector C++
随便建一个控制台工程mysqlCon,尝试编译(目标就是编译通过,通过了就完成任务了)
#include "stdafx.h"
#include <iostream>
#include <map>
#include <string>
#include <memory>
#include "mysql_driver.h"
#include "mysql_connection.h"
#include "cppconn/driver.h"
#include "cppconn/statement.h"
#include "cppconn/prepared_statement.h"
#include "cppconn/metadata.h"
#include "cppconn/exception.h"
using namespace std;
using namespace sql;
#pragma comment(lib, "mysqlcppconn.lib")
int main(int argc, char *argv[])
{
return 0;
}
肯定有问题
2.1 拷入需要的文件
>>将安装目录(C:\Program Files\MySQL\MySQL Connector C++ 1.1.3)下的include整个拷入工程目录E:\VSProject\mysqlCon\mysqlCon;
>>将C:\Program Files\MySQL\MySQL Connector C++ 1.1.3\lib\opt目录下的mysqlcppconn.lib,拷入工程目录E:\VSProject\mysqlCon\mysqlCon;
>>将C:\Program Files\MySQL\MySQL Connector C++ 1.1.3\lib\opt的三个dll文件:mysqlcppconn.dll、MSVCR90.dll、MSVCP90.dll,拷入程序运行目录E:\VSProject\mysqlCon\mysqlCon\Debug
2.2 设置VS工程属性
>>属性--c/c++--常规--附加包含目录:E:\VSProject\mysqlCon\mysqlCon\include (刚刚放入工程的include)
对于MySQL Connector的引用到此结束,再次编译。该死的错误,找不到boost目录下的文件;开始下一个征程,编译安装boost;
3.下载编译boost
3.1下载地址:http://www.boost.org/users/history/version_1_55_0.html
目前最高版本boost_1_55_0,下载以后,解压到存英文,无空格的路径下,本次解压到D盘;
3.2 编译boost
打开VS 2005命令提示窗口,切换到刚刚解压后的目录:D:\boost_1_55_0\boost_1_55_0
运行:
bootstrap.bat
会生成两个文件:b2.exe和bjam.exe
再执行编译
b2 install --prefix=PREFIX
其中,PREFIX就是编译后将要输出的路径,boost当前目录下,此时可能要等上很久...
编译完成以后,在当前目录下出现了include 和 lib文件夹
4.设置boost环境
>>将D:\boost_1_55_0\boost_1_55_0\PREFIX\include\boost-1_55,加入属性--c/c++--常规--附加包含目录,与上一个用分号隔开;如:
"D:\boost_1_55_0\boost_1_55_0\PREFIX\include\boost-1_55";E:\VSProject\mysqlCon\mysqlCon\include
>>链接器--附加库目录:
D:\boost_1_55_0\boost_1_55_0\PREFIX\lib
至此,环境完全OK,编译通过。
5.测试代码
#include <string>
#include <memory>
#include "mysql_driver.h"
#include "mysql_connection.h"
#include "cppconn/driver.h"
#include "cppconn/statement.h"
#include "cppconn/prepared_statement.h"
#include "cppconn/metadata.h"
#include "cppconn/exception.h"
#define DBHOST "tcp://127.0.0.1:3306"
//#define DBHOST "localhost"
#define USER "root"
#define PASSWORD "123456"
#define DATABASE "mydb"
#define NUMOFFSET 100
#define COLNAME 200
using namespace std;
using namespace sql;
#pragma comment(lib, "mysqlcppconn.lib")
int main(int argc, char *argv[])
{
Driver *driver;
Connection *con;
Statement *stmt;
ResultSet *res;
Savepoint *savept;
int updatecount = 0;
/* initiate url, user, password and database variables */
sql::SQLString url(DBHOST);
sql::SQLString user(USER);
sql::SQLString password(PASSWORD);
sql::SQLString database(DATABASE);
try
{
driver = get_driver_instance();
/* create a database connection using the Driver */
con = driver -> connect(url, user, password);
/* turn off the autocommit */
con -> setAutoCommit(0);
con -> setSchema(database);
/* create a statement object */
stmt = con -> createStatement();
/* run a query which returns exactly one result set */
stmt->execute("set names 'gbk'");
res = stmt -> executeQuery ("SELECT * FROM tmytb");
/* retrieve the row count in the result set */
cout << "/nRetrieved " << res->rowsCount() << " row(s)." << endl;
while (res->next())
{
sql::SQLString sqRet;
sqRet = res -> getString("Col1");
cout << sqRet.c_str() << " ";
sqRet = res -> getString("Col2");
cout << sqRet.c_str() << endl;
}
/* Clean up */
delete res;
delete stmt;
con -> close();
delete con;
}catch (SQLException &e) {
return -1;
} catch (std::runtime_error &e) {
return -2;
}
getchar();
return 0;
}