一、VS08连接MySQL的配置
1、新建C++项目,包含头文件
2、在项目->属性->C/C++->常规->附加目录 中添加包含各种头文件的目录,在MySQL Connector/C++的安装目录下(E:\Program Files\MySQL\Connector C++ 1.1.0),include目录其下包含了两个常用的头文件(mysql-connection.h / mysql-driver.h),另外其目录下的cppconn文件夹则包含了更多的头文件,把这些包含有各种头文件的目录全部添加到VC的附加目录中(E:\Program Files\MySQL\Connector C++ 1.1.0\include // E:\Program Files\MySQL\Connector C++ 1.1.0\include\cppconn)。有个问题是范例在运行时提示没有sqlstring.h这个头文件,前面包含的目录中也确实没有这个头文件。网上查了有这个头文件下载,添加到上面含有各种头文件的目录中即可;另外一个问题是提示找到不到boost类库,网上也有这个类库(比较大),下载后将其位置(D:\Program Files\boost\boost_1_51)添加到 附加目录中即可;
3、在项目->属性->链接器->常规->附加库目录 中添加包含各种库(lib)的目录,同上面加入这两个目录(E:\Program Files\MySQL\Connector C++ 1.1.0\lib\opt // E:\Program Files\MySQL\Connector C++ 1.1.0\lib\debug)即可;但在运行范例时提示无法启动程序,丢失libmysql.dll
4、在项目->属性->链接器->常规->输入 中添加 附加依赖项,加入上面lib中的两个库文件(mysqlcppconn.lib // mysqlcppconn-static.lib);
5、将上面lib下的 mysqlcppconn.dll 和MySQL serve中的lib下(E:\Program Files\MySQL\MySQL Server 5.5\lib)的libmysql.dll 这两个动态链接库添加到windows/system32目录下;否则运行时会提示丢失dll;
二、范例概述
网上找的范例
#include "stdafx.h"
#include
#include
#include
using namespace sql;
using namespace std;
using namespace mysql;
void RunConnectMySQL()
{
//MySQL_Driver *driver;
mysql::MySQL_Driver *driver;
Connection *con;
Statement *state;
ResultSet *result;
// 初始化驱动
driver = sql::mysql::get_mysql_driver_instance();
//driver = get_mysql_driver_instance();
// 建立链接
con = driver->connect("tcp://127.0.0.1:3306", "root", "whu");
state = con->createStatement();
state->execute("use test");
// 查询
result = state->executeQuery("select * from testusr where id > 1002");
// 输出查询
while(result->next())
{
int id = result->getInt("id");
//string name = result->getString("name");
//cout << id << " : " << name << endl;
cout << id << endl;
}
delete state;
delete con;
}
int main()
{
RunConnectMySQL();
getchar();
return 0;
}
根据前面的博文知道,MySQL Connector/C++遵循JDBC规范,实现了下面这些类:
三、范例程序理解
1、建立数据库连接
根据前面的博客知,范例定义了四个对象指针(四个类分别是Driver或者MySQL_Driver、Connection、Statement、ResultSet)。 sql::Connection代表到数据库的连接,可以通过sql::Driver来创建。sql::mysql::get_mysql_driver_instance()方法用于获取sql::Driver,通过调用sql::Driver::connect方法来创建sql::Connection对象。
Driver类重载了connect方法,一个接收数据库地址的url、用户名和密码的字符串,后一个接收一个map,map中以key/value的形式包含数据库地址、用户名与密码。使用TCP/IP连接到MySql服务器的url字符串的格式如下:"tcp://[hostname[:port]][/schemaname]"。例如:tcp://127.0.0.1:5555/some_scehma。hostname和端口号是可选的,如果省略,默认是127.0.0.1与3306。如果hostname为"localhost",会被自动转换为"127.0.0.1"。schemaname也是可选的,如果连接字符串中没有设置schema,需要在程序中通过Connection::setSchema方法手动设置。
这样初始化和链接的工作就已经完成:
//定义对象指针
//MySQL_Driver *driver;
Driver *driver;
Connection *con;
// 初始化驱动
driver = sql::mysql::get_mysql_driver_instance();
//driver = get_mysql_driver_instance();
// 建立链接
con = driver->connect("tcp://127.0.0.1:3306", "root", "whuhwq");
Connection *con;
Statement *state;
state = con->createStatement();
ResultSet *result;
Statement *state;
state->execute("use test");
// 查询
result = state->executeQuery("select * from testusr where id > 1002"); //返回ResultSet对象
ResultSet *result;
int id = result->getInt("id");
Connection *con;
Statement *state;
delete state;delete con;