[size=medium][/size] 在做对比mysql和sqlite数据对比工作时候,我用C++编程来实现时候遇到了些问题,首先就是怎么在C++里把mysql的数据读出来,现在解决如下:
1.需要用到的头文件?
由于C++没有提供专门的数据库操作接口函数,相应的接口函数都由第三方来提供。Mysql本身提供了这些函数接口,因此我们要把他们导入到项目中。这里要注意的是,安装mysql时候,要选上安装开发组件,安装后才会包含这些头文件,而接口函数就由这些头文件和lib等文件提供。Mysql似乎没有公开这些接口函数的实现代码,而是封装进了静态库文件libmyql.lib和动态库文件libmysql.dll。
因此我们首先要做两个事情:
1.1mysql安装目录的里mysql server 5.0\lib\debug下的libmysql.lib和 libmysql.dll复制到C++工程等项目文件夹里
由于appserv里的mysql里,我找不到此项,因此我在网上下载了一个mysql代码,把其中的lib和include放到工程目录里,这两个文件夹含有上面提到的
2、然后参考网上的代码我在工程文件里添了头:
pragma comment(lib,"lib\\libmysql.lib") //把库文件载入C++项目
#include"iostream"
#include <WinSock2.h>
#include "include/mysql.h"
3、此时下面的这个读出数据程序便可用了:[/size][/size][/size]
using namespace std;
int main()
{
char* user_name="你的数据库管理员名称";
char* user_pw="你的数据库密码";
char* db_name="my_db";
//用于查询
int ret=0;
string sql_cmd;
// 收集查询结果
MYSQL_RES *res_ptr=NULL;
//显示字段名
MYSQL_ROW sqlrow=NULL;
MYSQL_FIELD *fields=NULL;
unsigned int num_fields=0;
int ii;
MYSQL obj_sql;
mysql_init(&obj_sql);
ret=mysql_options(&obj_sql,MYSQL_SET_CHARSET_NAME,"gbk");
if(ret==0)
cout<<"mysql options success"<<endl;
else
cout<<"options failed";
if(mysql_real_connect(&obj_sql,NULL,user_name,user_pw,db_name,0,NULL,0))
{
cout<<"数据库连接成功"<<endl;
}
else
{
const char* error_code=0;
error_code=mysql_error(&obj_sql);
cout<<"Error Code:"<<error_code<<endl;
}
//查询
sql_cmd="select *from person";
ret=mysql_real_query(&obj_sql,sql_cmd.c_str(),sql_cmd.length());
if(ret!=0)
{
cout<<"fail to query"<<endl;
}
//获取查询结果
res_ptr=mysql_store_result(&obj_sql);
if(res_ptr)
{
cout<<"rows number:"<<(unsigned long)mysql_num_rows(res_ptr)<<endl; //行数
}
//显示字段名
num_fields=mysql_num_fields(res_ptr); //结果的列数
fields=mysql_fetch_fields(res_ptr); //所有字段存到字段结构体
for(ii=0;ii<num_fields;ii++)
{
//显示所有字段名
cout<<fields[ii].name<<"\t";
}
cout<<endl;
///////////////////////显示每行查询结果
while(sqlrow=mysql_fetch_row(res_ptr))//取出行
{
//每行都做如下处理
// string str;
for(int ii=0;ii<num_fields;ii++)
{
if(sqlrow[ii] !=NULL)
{
//str=sqlrow[ii];
//cout<<str.c_str()<<"\t";
cout<<sqlrow[ii]<<"\t";
}
else
{
cout<<"NULL\t";
}
}
cout<<endl;
}
//结束显示
mysql_free_result(res_ptr);
mysql_close(&obj_sql); //关闭数据库连接
return 0;
}
1.需要用到的头文件?
由于C++没有提供专门的数据库操作接口函数,相应的接口函数都由第三方来提供。Mysql本身提供了这些函数接口,因此我们要把他们导入到项目中。这里要注意的是,安装mysql时候,要选上安装开发组件,安装后才会包含这些头文件,而接口函数就由这些头文件和lib等文件提供。Mysql似乎没有公开这些接口函数的实现代码,而是封装进了静态库文件libmyql.lib和动态库文件libmysql.dll。
因此我们首先要做两个事情:
1.1mysql安装目录的里mysql server 5.0\lib\debug下的libmysql.lib和 libmysql.dll复制到C++工程等项目文件夹里
由于appserv里的mysql里,我找不到此项,因此我在网上下载了一个mysql代码,把其中的lib和include放到工程目录里,这两个文件夹含有上面提到的
2、然后参考网上的代码我在工程文件里添了头:
pragma comment(lib,"lib\\libmysql.lib") //把库文件载入C++项目
#include"iostream"
#include <WinSock2.h>
#include "include/mysql.h"
3、此时下面的这个读出数据程序便可用了:[/size][/size][/size]
using namespace std;
int main()
{
char* user_name="你的数据库管理员名称";
char* user_pw="你的数据库密码";
char* db_name="my_db";
//用于查询
int ret=0;
string sql_cmd;
// 收集查询结果
MYSQL_RES *res_ptr=NULL;
//显示字段名
MYSQL_ROW sqlrow=NULL;
MYSQL_FIELD *fields=NULL;
unsigned int num_fields=0;
int ii;
MYSQL obj_sql;
mysql_init(&obj_sql);
ret=mysql_options(&obj_sql,MYSQL_SET_CHARSET_NAME,"gbk");
if(ret==0)
cout<<"mysql options success"<<endl;
else
cout<<"options failed";
if(mysql_real_connect(&obj_sql,NULL,user_name,user_pw,db_name,0,NULL,0))
{
cout<<"数据库连接成功"<<endl;
}
else
{
const char* error_code=0;
error_code=mysql_error(&obj_sql);
cout<<"Error Code:"<<error_code<<endl;
}
//查询
sql_cmd="select *from person";
ret=mysql_real_query(&obj_sql,sql_cmd.c_str(),sql_cmd.length());
if(ret!=0)
{
cout<<"fail to query"<<endl;
}
//获取查询结果
res_ptr=mysql_store_result(&obj_sql);
if(res_ptr)
{
cout<<"rows number:"<<(unsigned long)mysql_num_rows(res_ptr)<<endl; //行数
}
//显示字段名
num_fields=mysql_num_fields(res_ptr); //结果的列数
fields=mysql_fetch_fields(res_ptr); //所有字段存到字段结构体
for(ii=0;ii<num_fields;ii++)
{
//显示所有字段名
cout<<fields[ii].name<<"\t";
}
cout<<endl;
///////////////////////显示每行查询结果
while(sqlrow=mysql_fetch_row(res_ptr))//取出行
{
//每行都做如下处理
// string str;
for(int ii=0;ii<num_fields;ii++)
{
if(sqlrow[ii] !=NULL)
{
//str=sqlrow[ii];
//cout<<str.c_str()<<"\t";
cout<<sqlrow[ii]<<"\t";
}
else
{
cout<<"NULL\t";
}
}
cout<<endl;
}
//结束显示
mysql_free_result(res_ptr);
mysql_close(&obj_sql); //关闭数据库连接
return 0;
}