花了两天的时间,终于基本搞明白C++与开源数据库软件MySQL的接口问题了。网上很多资料说得都很散,来,看兄弟我来总结一下这其中碰到的问题,同时也为每个问题提供一个解决方案:

1 需要什么头文件?

标准C++没有提供专门的数据库操作接口函数,相应的接口函数都由第三方提供。MySQL本身提供了这些接口函数,因此我们要把它们导入到项目中。这里要注意的是,安装MySQL时,要选上安装开发组件,安装后才会包含这些头文件,而接口函数就由这些头文件和lib等文件提供。MySQL似乎没公开这些接口函数的实现代码,而是封装进了静态库文件libmysql.lib和动态库文件libmysql.dll.

所以我们首先要做两个事情:

1.1 把MySQL安装目录的MySQL Server 5.0\lib\debug下面的两个文件libmysql.lib和libmysql.dll,复制到C++工程项目文件夹里。

1.2 把MySQL安装目录下的include文件夹,复制到C++工程项目文件夹里。

然后,在用到这些接口函数里添加头文件等:

#pragma comment(lib,"libmysql.lib")  //把库文件载入C++项目

#include

#include "include\mysql.h"

上面的这个方法,只是其中的一个解决方法。

2 怎么连接到一个已经存在的MySQL数据库?

可以用mysql_real_connect来连接数据库,用完后记得要用mysql_close断开这个连接.

比如完整的代码如下:

mysql数据库接口调用仅仅有查询权限_mysql

3 连接到数据库后,怎样执行一条SQL语句?

用函数mysql_query,或者mysql_real_query。后者速度更快

如果数据库含有二进制数据,则可能以\0结尾,那样的话就必须用mysql_real_query.

string sql_cmd = "select * from mytable";

//ret = mysql_query( &obj_sql, sql_cmd.c_str() );

ret = mysql_real_query( &obj_sql, sql_cmd.c_str(), sql_cmd.length() );

比较完整的用法是:

mysql数据库接口调用仅仅有查询权限_windows c++ mysql_02

事实上,update/insert/alter等基本的SQL语句都是用这两个函数来执行的。

sql_cmd = "update mytable set sigle = 'y' where name = 'rachel'"; //修改某记录

sql_cmd = "alter table mytable drop column sigle";  //删除一列

sql_cmd = "alter table mytable add column single char(1)";//添加列

4 怎样查看查询的结果?

4.1 获取查询结果

在使用了mysql_real_query进行了Select查询之后,可以用mysql_store_result来收集查询结果,用完后

记得用mysql_free_result来释放内存:

MYSQL_RES *res_ptr = NULL;
res_ptr = mysql_store_result( &obj_sql ); //收集查询结果
if ( res_ptr )
{
cout << "rows number: " << (unsigned long)mysql_num_rows(res_ptr) << endl;
//此处加入数据处理的代码
}
mysql_free_result(res_ptr); //释放结果集使用的内存

4.2 显示字段名

用mysql_store_result收集了查询结果后,可用mysql_fetch_fields来收集所有字段:

mysql数据库接口调用仅仅有查询权限_sql_03

4.3 显示查询到的数据:

用mysql_store_result收集了查询结果后,可用mysql_fetch_row函数来获得结果的下一行的内容:

mysql数据库接口调用仅仅有查询权限_mysql数据库接口调用仅仅有查询权限_04

综合上面三个分点,查看查询结果的代码的一种实现方法:

mysql数据库接口调用仅仅有查询权限_MySQL_05

5 运行结果

把上面几点的代码结合起来应用,也就是:

连接到数据库

查询数据库中的一个表的所有内容

显示字段名

显示查询到的所有记录

关系数据库连接

则运行结果如下图所示:

mysql数据库接口调用仅仅有查询权限_mysql_06

最后修改于 2009-08-28 22:08