我会先帖简单的带注释的代码,再详细解释
首先,看一下Linux下Mysql数据库的数据,最后再用程序打印出来
从上图我们可以看出,在一个名为 test数据库中,有一个名为 Msg的表..并且表中的内容,也显示了出来。
接下来的程序,就是要打印Msg表中的所有数据。
#include<stdio.h>
#include<mysql.h>
#include<string.h>
int main(int argc, char const *argv[])
{
MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;
int t;
/*SELECT * FROM Msg是一个MYSQL语句,意思为获取
名为Msg的表中的所有数据*/
char *query = "SELECT * FROM Msg";
/*初始化mysql句柄*/
mysql = mysql_init(NULL);
/*链接mysql数据库,连接的库名为test*/
if(!mysql_real_connect(mysql,"localhost","root","zhujunwen"
,"test",0,NULL,0))
{
printf("failed to connect:%s\n",mysql_error(mysql));
return -1;
}
/*往MYSQL数据库发送MYSQL语句,成功返回0*/
t=mysql_real_query(mysql,query,(unsigned int)strlen(query));
if(t)
{
printf("failed to query:%s\n",mysql_error(mysql));
return -1;
}
/*用res获取刚发送的MYSQL语句 返回的结果集*/
res = mysql_store_result(mysql);
/*mysql_fetch_row用于获取结果集中的下一行数据*/
while(row=mysql_fetch_row(res))
{
/*mysql_num_fields返回结果集的一行中有多少列个数据*/
for(t=0;t<mysql_num_fields(res);t++)
{
printf("%s\t",row[t]);
}
printf("\n");
}
/*在mysql中,既然获取了结果集,最后就要释放它*/
mysql_free_result(res);
/*关闭mysql句柄*/
mysql_close(mysql);
return 0;
}
程序执行结果:
要大概讲讲的是函数:mysql_real_query(),mysql_store_result(),mysql_fetch_row(),mysql_num_fields()
mysql_real_query():往数据库发送MYSQL命令,而且有一个参数是,需要输入命令的字符数,用strlen就可以
mysql_store_result():当往mysql数据发送一个MYSQL语句之后,这个函数就返回MYSQL语句获取到的结果集,获取了结果集,记得最后要
释放掉,下面再说说我的间接什么是结果集。
mysql_fetch_row():对结果集进行处理,获取结果集的下一行数据,进行处理。
mysql_num_fields():返回 结果集的一个数据中有多少列。
何为结果集:
在我看来
上图就是一个结果集,mysql_store_result返回的就是类似这样的一个表格。(不包括 num,name,sex等字段)
结合上面的程序,那个while循环嵌套for循环,应该不难看懂。
另外row的类型是MYSQL类型,其实就是 char**类型,所以row[t]中放的是一个指向一个字符串首地址的指针(也可以看成放的是一个字符串的首地址)。
所以row[t]可以看成是一个字符串。