可以用connector c++操作mysql。
1. 从官网下载对应的connector c++版本。
http://dev.mysql.com/downloads/connector/cpp/
我这里选择的是
64位的noinstall版本。
复制解压后的文件夹到相应的工程下。(方便移植,拷到别人电脑上的时候,不需要别人下载配置路径什么的。)
2. 包含相对路径。
使用变量ProjectDir。该路径表示项目文件所在路径。“..\”表示上一层目录。
3. 链接库配置。
代码中加入:#pragma comment(lib,"mysqlcppconn.lib") 动态链接。(ps:connector lib下还有一个mysqlcppconn-static.lib 是静态链接库,网上说不太稳定)
connector lib中的mysqlcppconn.dll拷到工程源目录下。
同时:mysql lib中的libmysql.dll也拷到了工程源目录下, 运行时要用到。
(.lib和.dll的区别与联系见 http://blog.csdn.net/u012420309/article/details/51363101)
4. 修改端口号(不修改是默认的)。
打开mysql的配置文件my-default.ini,将#port = ... 修改为port=3306。(也就是去掉注释赋值)
配置文件修改后,要重启mysql。重启简单方法见上一篇博客。
代码:
#include "mysql_connection.h" #include "mysql_driver.h" #include <cppconn/statement.h> #include <iostream> #include "string" using namespace std; #pragma comment(lib,"mysqlcppconn.lib") int main() { sql::mysql::MySQL_Driver *driver = NULL; sql::Connection *con = NULL; //初始化驱动 driver = sql::mysql::get_mysql_driver_instance(); //建立链接 con = driver->connect("tcp://localhost:3306", "root", "zq"); sql::Statement * stmt = con->createStatement(); stmt->execute("use test"); //查询 sql::ResultSet * result = stmt->executeQuery("select * from testuser"); while (result->next()) { int id = result->getInt(1); //也可以result->getInt("id"); string name = result->getString(2).c_str(); //注意这里要转换c_str() cout << id << ":" << name << endl; } con->close(); delete stmt; delete con; return 0; }
运行结果:
1001:google
1002:kingsoft
PS:这里用到的数据库test和表testuser是上一篇博客里命令行生成的。具体长相:
+------+----------+ | id | name | +------+----------+ | 1001 | google | | 1002 | kingsoft | +------+----------+
当然,也可以通过c++生成。
stmt->execute("create database test"); stmt->execute("use test"); stmt->execute("create table testuser(id INT, name CHAR(20))"); //插入 string strsql = "insert into testuser(id,name)values(1001,'google')"; for (int i = 0; i < 10; i++) { stmt->execute(strsql.c_str()); }其实就是执行命令行操作。
PPS: mysql_connection.h里包含了
#include <boost/shared_ptr.hpp>
#include <boost/scoped_ptr.hpp>
可以把boost放到mysql-connector的include目录下。也可以在工程的包含目录中添加boost的路径。