花了两天的时间,终于基本搞明白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断开这个连接.
比如完整的代码如下:
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() );
比较完整的用法是:
事实上,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来收集所有字段:
4.3 显示查询到的数据:
用mysql_store_result收集了查询结果后,可用mysql_fetch_row函数来获得结果的下一行的内容:
综合上面三个分点,查看查询结果的代码的一种实现方法:
5 运行结果
把上面几点的代码结合起来应用,也就是:
连接到数据库
查询数据库中的一个表的所有内容
显示字段名
显示查询到的所有记录
关系数据库连接
则运行结果如下图所示:
最后修改于 2009-08-28 22:08