2011-05-16 wcdj
(一) 不返回数据的SQL语句 —— UPDATE、DELETE 和 INSERT
(二) 发现插入的内容
(三) 返回数据的语句
(1) 一次提取所有数据的函数
(2) 一次提取一行数据的函数
(四) 处理返回的数据
(四) 处理返回的数据
现在已知道了如何提取行,下面可以学习如何处理返回的实际数据了。如同大多数SQL数据库一样,MySQL返回两种类型的数据 。
【1】从表中提取的信息,也就是列数据 。
【2】关于数据的数据,即所谓的元数据 (metadata),例如,列名和类型。
问题 :如何将数据本身转化为有用的形式。
mysql_field_count函数提供了一些关于查询结果的基本信息。它接受连接对象,并返回结果集中的字段(列)数目:
unsigned int mysql_field_count ( MYSQL *connection );
在更通用的方式下,你可以用mysql_field_count做其他事情,比如判断为何mysql_store_result的调用会失败。例如,如果mysql_store_result返回NULL,但是mysql_field_count返回一个正数,你可以推测这是一个提取错误。但是,如果mysql_field_count返回0,则表示没有列可以提取,这可以解释为何存储结果会失败。
例子:
打印无格式化的数据
select3.c
编译程序:
$ gcc -I/usr/include/mysql select3.c -L/usr/lib/mysql -lmysqlclient -o select3
问题: 上面的程序可以运行,虽然输出不是特别美观。但是并未考虑结果中可能出现的NULL值。如果想要打印出更整洁的格式化(或表格化)的数据,需要同时得到MySQL返回的数据和元数据。可以使用mysql_fetch_field来同时将元数据和数据提取到一个新的结构中。
MYSQL_FIELD *mysql_fetch_field ( MYSQL_RES *result );
需要重复调用此函数,直到返回表示数据结束的NULL值为止。然后,可以使用指向字段结构数据的指针来得到关于列的信息。结构MYSQL_FILED定义在mysql.h中。
例子:
更完整的打印
select4.c
编译程序:
$ gcc -I/usr/include/mysql select4.c -L/usr/lib/mysql -lmysqlclient -o select4
这仍然不是很漂亮,但它很好地阐明了如何通过同时处理原始数据和元数据来更有效地使用数据。
更多使用方法参考MySQL手册。
参考 :
SQL语言基本语句介绍
Linux 程序设计(第4版)第8章 P.296