MYSQL_C_API详解.doc

上传人:枫** 文档编号:544293639 上传时间:2023-12-03 格式:DOC 页数:36 大小:145.01KB
返回 下载 相关 举报
MYSQL_C_API详解.doc_第1页
第1页 / 共36页
MYSQL_C_API详解.doc_第2页
第2页 / 共36页
MYSQL_C_API详解.doc_第3页
第3页 / 共36页
MYSQL_C_API详解.doc_第4页
第4页 / 共36页
MYSQL_C_API详解.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《MYSQL_C_API详解.doc》由会员分享,可在线阅读,更多相关《MYSQL_C_API详解.doc(36页珍藏版)》请在金锄头文库上搜索。

1、mysql api for C详细介绍(1)2009-11-22 16:33C API代码是随MySQL分发的,它被包含在mysqlclient库且允许C程序存取一个数据库。 在 MySQL源代码分发中的很多客户是用C编写的。如果你正在寻找演示怎样使用C API的例子,看一下这些客户程序。大多数其他客户 API(除了Java的所有)都使用mysqlclient库与MySQL服务器通信。这意味着,例如,你能利用很多被其他客户程序使用的同一环境变量,因为他们从库中引用。对这些变量的一张表,见12.1 不同的MySQL程序的概述。客户有一个最大通讯缓冲区大小。初始分配的缓冲区大小(16K字节) 自动

2、地增加到最大尺寸(缺省的最大值是24M)。因为缓冲区大小只是按保证需求而被增加,简单地增加缺省的最大限制并不造成更多被消耗。该尺寸检查主要是一个对错误的查询和通讯包的检查。通讯缓冲区必须足够大以便一个单独的SQL语句(对客户-服务器传输)和一行返回的数据 (对服务器-客户传输)。每个线程的通讯缓冲区被动态扩大到最大限制来处理任何查询或行。例如,如果你包含大到16M数据的BLOB值,你必须有一个至少 16M通讯缓冲区限制(在服务器和客户两端)。客户的缺省最大值是24M,但是在服务器端的缺省最大值是1M。你可以在服务器启动时通过改变 max_allowed_packet参数的值来改变它。见10.2

3、.3 调节服务器参数。MySQL服务器在每个查询后缩小每个通讯缓冲区到net_buffer_length个字节。对客户,与一个连接相关的缓冲区的大小没被减少,直到连接被关闭,在此时客户内存被回收。如果你用线程的编程,你应该用-with-thread-safe-client编译MySQL C API,这将使C API线程对每个连接更安全。你可以让2个线程共享相同的连接,只要如果你做下列事情:两个线程不能同时在同一个连接上发送查询到MySQL。特别是你必须保证在一个mysql_query()和mysql_store_result()之间没有其他线程正在使用同一个连接。 许多线程能存取用mysql_

4、store_result()检索出来的不同结果集合。 如果你使用mysql_use_result,你必须保证没有其他线程在同一个连接上正在询问任何东西,直到结果集合被关闭。 20.2 C API数据类型MYSQL 这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。 MYSQL_RES 这个结构代表返回行的一个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。从查询返回的信息在本章下文称为结果集合。 MYSQL_ROW 这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不

5、能将这些视为空终 止串,因为这样的值可以在内部包含空字节) 行通过调用mysql_fetch_row()获得。 MYSQL_FIELD 这个结构包含字段信息,例如字段名、类型和大小。其成员在下面更详细地描述。你可以通过重复调用mysql_fetch_field()对每一列获得 MYSQL_FIELD结构。字段值不是这个结构的部分;他们被包含在一个MYSQL_ROW结构中。 MYSQL_FIELD_OFFSET 这是一个相对一个MySQL字段表的偏移量的类型安全的表示。(由mysql_field_seek()使用。) 偏移量是在一行以内的字段编号,从0开始。 my_ulonglong 该类型用于

6、行编号和mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()。这种类型提供 0到1.84e19的一个范围。在一些系统上,试图打印类型my_ulonglong的值将不工作。为了打印出这样的值,将它变换到unsigned long并且使用一个%lu打印格式。例如:printf (Number of rows: %lun, (unsigned long) mysql_num_rows(result);MYSQL_FIELD结构包含列在下面的成员:char * name 字段名,是一个空结尾的字符串。 char * table 包含该字段的表

7、的名字,如果它不是可计算的字段。对可计算的字段,table值是一个空字符串。 char * def 这字段的缺省值,是一个空结尾的字符串。只要你使用,只有你使用mysql_list_fields()才可设置它。 enum enum_field_types type 字段类型。type值可以是下列之一:类型值 类型含义 FIELD_TYPE_TINY TINYINT字段 FIELD_TYPE_SHORT SMALLINT字段 FIELD_TYPE_LONG INTEGER字段 FIELD_TYPE_INT24 MEDIUMINT字段 FIELD_TYPE_LONGLONG BIGINT字段 FI

8、ELD_TYPE_DECIMAL DECIMAL或NUMERIC字段 FIELD_TYPE_FLOAT FLOAT字段 FIELD_TYPE_DOUBLE DOUBLE或REAL字段 FIELD_TYPE_TIMESTAMP TIMESTAMP字段 FIELD_TYPE_DATE DATE字段 FIELD_TYPE_TIME TIME字段 FIELD_TYPE_DATETIME DATETIME字段 FIELD_TYPE_YEAR YEAR字段 FIELD_TYPE_STRING 字符串(CHAR或VARCHAR)字段 FIELD_TYPE_BLOB BLOB或TEXT字段(使用max_len

9、gth决定最大长度) FIELD_TYPE_SET SET字段 FIELD_TYPE_ENUM ENUM字段 FIELD_TYPE_NULL NULL- 类型字段 FIELD_TYPE_CHAR 不推荐;使用FIELD_TYPE_TINY代替你可以使用IS_NUM()宏来测试字段是否有一种数字类型。将type值传给IS_NUM()并且如果字段是数字的,它将计算为TRUE:if (IS_NUM(field-type) printf(Field is numericn);unsigned int length 字段宽度,在表定义中指定。 unsigned int max_length 对结果集合的

10、字段的最大宽度(对实际在结果集合中的行的最长字段值的长度)。如果你使用mysql_store_result()或 mysql_list_fields(),这包含字段最大长度。如果你使用mysql_use_result(),这个变量的值是零。 unsigned int flags 字段的不同位标志。flags值可以是零个或多个下列位设置:标志值 标志含义 NOT_NULL_FLAG 字段不能是NULL PRI_KEY_FLAG 字段是一个主键的一部分 UNIQUE_KEY_FLAG 字段是一个唯一键的一部分 MULTIPLE_KEY_FLAG 字段是一个非唯一键的一部分。 UNSIGNED_FL

11、AG 字段有UNSIGNED属性 ZEROFILL_FLAG 字段有ZEROFILL属性 BINARY_FLAG 字段有BINARY属性 AUTO_INCREMENT_FLAG 字段有AUTO_INCREMENT属性 ENUM_FLAG 字段是一个ENUM(不推荐) BLOB_FLAG 字段是一个BLOB或TEXT(不推荐) TIMESTAMP_FLAG 字段是一个TIMESTAMP(不推荐)BLOB_FLAG、ENUM_FLAG和TIMESTAMP_FLAG标志的使用是不推 荐的,因为他们指出字段的类型而非它的类型属性。对FIELD_TYPE_BLOB、FIELD_TYPE_ENUM或 FI

12、ELD_TYPE_TIMESTAMP,最好是测试field-type。下面例子演示了一个典型的flags值用法:if (field-flags & NOT_NULL_FLAG) printf(Field cant be nulln);你可以使用下列方便的宏决来确定flags值的布尔状态:IS_NOT_NULL(flags) 真,如果该字段被定义为NOT NULL IS_PRI_KEY(flags) 真,如果该字段是一个主键 IS_BLOB(flags) 真,如果该字段是一个BLOB或TEXT(不推荐;相反测试field-type)unsigned int decimals 对数字字段的小数位数

13、。 20.3 C API函数概述在 C API 中可用的函数列在下面,并且在下一节更详细地描述。见20.4 C API函数描述。mysql_affected_rows() 返回被最新的UPDATE, DELETE或INSERT查询影响的行数。 mysql_close() 关闭一个服务器连接。 mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。 mysql_change_user() 改变在一个打开的连接上的用户和数据库。 mysql_create_db() 创建一个数据库。该函数不推荐;而使用SQL命令CREATE DAT

14、ABASE。 mysql_data_seek() 在一个查询结果集合中搜寻一任意行。 mysql_debug() 用给定字符串做一个DBUG_PUSH。 mysql_drop_db() 抛弃一个数据库。该函数不推荐;而使用SQL命令DROP DATABASE。 mysql_dump_debug_info() 让服务器将调试信息写入日志文件。 mysql_eof() 确定是否已经读到一个结果集合的最后一行。这功能被反对; mysql_errno()或mysql_error()可以相反被使用。 mysql_errno() 返回最近被调用的MySQL函数的出错编号。 mysql_error() 返回

15、最近被调用的MySQL函数的出错消息。 mysql_escape_string() 用在SQL语句中的字符串的转义特殊字符。 mysql_fetch_field() 返回下一个表字段的类型。 mysql_fetch_field_direct () 返回一个表字段的类型,给出一个字段编号。 mysql_fetch_fields() 返回一个所有字段结构的数组。 mysql_fetch_lengths() 返回当前行中所有列的长度。 mysql_fetch_row() 从结果集合中取得下一行。 mysql_field_seek() 把列光标放在一个指定的列上。 mysql_field_count() 返回最近查询的结果列的数量。 mysql_field_tell() 返回用于最后一个mysql_fetch_field()的字段光标的位置。 mysql_free_result() 释放一个结果集合使用的内存。 mysql_get_client_info() 返回客户版本信息。 mysql_get_host_info() 返回一个描述连接的字符串。 mysql_get_proto_info() 返回连接使用的协议版本。 mysql_get_server_info() 返回服务器版本号。 mysql_in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号