C++调用mysql的API实现从数据库中读取数据

通过C++实现对数据库的操作主要是通过mysql_query(MYSQL *mysql, const char *q)函数实现,函数的第一个参数是MySQL的对象,第二个参数是让数据库执行的指令。

要取出数据库中的数据,需要用到的函数是mysql_store_result(MYSQL *mysql),在使用这个函数之前,我们需要先执行"SELECT * FROM menu",这句话可以理解为选中你所需要的数据,如果你只想选中表单中的某一个字段,如SELECT dishName FROM menu,那么数据库就会显示表单menu中的dishName字段的数据(这里的menu是我自己创建的表单名,dishName是我取的字段名)

选中数据以后,我们就可以执行mysql_store_result函数来取出对应的数据了

//选中所有的数据
sqlstr = "SELECT * FROM book;";
if (0 == mysql_query(&sock, sqlstr.c_str())) {
	cout << "show information successfully" << endl;
}
else {
	cout << "fail to show information" << endl;
	mysql_close(&sock);
}

//取出选中的数据,存到result中
MYSQL_RES *result = NULL;
result = mysql_store_result(&sock);
if (result != NULL) {
	cout << "get information successfully" << endl;
}
else
{
	cout << "fail to get information" << endl;
	mysql_close(&sock);
}

最开始的时候,为了确认是否成功取出数据,我都会使用if语句测试一下。

接下来我们取出某行或者某列数据,只需要从上面的 result 中取即可。

1、取出行数据

取出行数据时主要用到的函数是mysql_fetch_row(MYSQL_RES *result)函数

mysql_fetch_row函数每执行一次,便取出一行的数据,如果需要取出所有的行数据,需要执行多次,因此在使用这个函数之前,我们需要先计算 行数和列数。

m_nRowCount = mysql_num_rows(result);        //计算行数
m_nFieldCount = mysql_num_fields(m_res);      //计算列数

计算行数和列数也有对应的API,在计算完行数和列数以后,我们通过for循环逐一打印出每一行的数据。

for (size_t i = 0; i < m_nRowCount; i++)
{
	m_sqlrow = mysql_fetch_row(result);				//执行一次便可获得一行的信息
    
    //打印每一行的数据
	for (size_t j = 0; j < m_nFieldCount; j++)
	{
		cout << m_sqlrow[j] << " ";
	}
	cout << "\n";
}

 第一个for循环是取出每一行的数据,其排列方式是是按照对应列存储的,因此需要提前算出列数,其排列方式大致如下

然后是输出结果

 2、取出列数据

取出列数据和取出行数据类似,主要涉及到的函数是

mysql_fetch_field_direct(MYSQL_RES *res, unsigned int fieldnr);

        参数1: mysql_store_result函数的返回值 result

        参数2:想要取出的第  i  列的数据

MYSQL_FIELD	*m_sqlfield;
m_sqlfield = mysql_fetch_field_direct(result, 0);
cout<<m_sqlfield->name<<endl;

 值得注意的是,之前取出行数据的时候,行数据存在 m_sqlrow中,m_sqlrow这里可以看作是一个数组,但是取出列数据的时候,m_sqlfield需要看作是结构体的对象,可调用的成员比较局限,上面打印的是第0列的字段名,关于其他的成员,可以参考声明

 如果是在同一个作用域下取出行数据和列数据,那么mysql_store_result只需要执行一次

如果是在类的不同函数中取出行数据和列数据,那么每次取出行数据或者列数据之前都要执行mysql_store_result函数

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值