#include <iostream>
#include <mysql/mysql.h>
using namespace std;
MYSQL* m_mysql = NULL;
MYSQL_RES* m_result = NULL;
void init_db(){ //初始化
m_mysql = mysql_init(NULL);
if(NULL == m_mysql)
cout<<"mysql_init fail..."<<endl;
m_mysql = mysql_real_connect(m_mysql,"127.0.0.1","root","123456","test",3306,NULL,0);
if(NULL == m_mysql)
{
cout<<"连接失败"<<endl;
return;
}
cout<<"连接成功"<<endl;
}
int exeSql(string sql) // 执行sql
{
return mysql_query(m_mysql,sql.c_str()); // 成功 0 失败非 0
}
int selectSql(string sql) // 查询sql
{
int row = 0; // 返回的行数
if(exeSql(sql)) //进入则为非0
cout<<"run Sql err: "<<sql<<endl;
m_result = mysql_store_result(m_mysql); // 取出结果集
if(NULL == m_result)
{
m_result = NULL;
cout<<"查询结果为空"<<endl;
return 0;
}
row = m_result->row_count; //获取结果集的行数
cout<<"获取的行数为: "<<row<<endl;
return row;
}
void show_result() // 打印sql结果
{
unsigned int num_fileds; //结果集字段个数
MYSQL_FIELD* content_arr; //结果集字段信息,数组
num_fileds = mysql_num_fields(m_result);
content_arr = mysql_fetch_field(m_result);
for (int i=0;i<num_fileds;++i)
printf("%s\t\t",content_arr[i].name); //打印字段信息
printf("\n");
printf("================================================\n");
MYSQL_ROW row; //内容每一个行信息
while((row = mysql_fetch_row(m_result)) != NULL)
{
for (int i=0;i<num_fileds;++i)
printf("%s\t\t",row[i]);
printf("\n");
}
printf("---------------------------------------------------\n");
printf("%d row in set \n",m_result->row_count);
}
void select_show(string sql)
{
selectSql(sql);
if(NULL != m_result)
show_result();
}
int main()
{
init_db();
select_show("select * from student");
mysql_free_result(m_result);
mysql_close(m_mysql);
return 0;
}