您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Mysql C 帮助手册
25.2.MySQLCAPI25.2.1.CAPI数据类型25.2.2.CAPI函数概述25.2.3.CAPI函数描述25.2.4.CAPI预处理语句25.2.5.CAPI预处理语句的数据类型25.2.6.CAPI预处理语句函数概述25.2.7.CAPI预处理语句函数描述25.2.8.CAPI预处理语句方面的问题25.2.9.多查询执行的CAPI处理25.2.10.日期和时间值的CAPI处理25.2.11.CAPI线程函数介绍25.2.12.CAPI嵌入式服务器函数介绍25.2.13.使用CAPI时的常见问题25.2.14.创建客户端程序25.2.15.如何生成线程式客户端CAPI代码是与MySQL一起提供的。它包含在mysqlclient库中,并允许C程序访问数据库。MySQL源码分发版的很多客户端是用C语言编写的。如果你正在寻找能演示如何使用CAPI的示例,可参看这些客户端程序。你可以在MySQL源码分发版的客户端目录下找到它们。大多数其他客户端API(除了Connector/J和Connector/NET)采用mysqlclient库来与MySQL服务器进行通信。这意味着(例如),你可以利用很多相同环境变量(与其他客户端程序使用的环境变量相同)带来的好处,这是因为它们是从库中引用的。关于这些变量的详细清单,请参见第8章:客户端和实用工具程序。客户端具有最大的通信缓冲区大小。初始分配的缓冲区大小(16KB)将自动增加到最大(最大为16MB)。由于缓冲区大小将按需增加,简单地增加默认的最大限制,从其本身来说不会增加资源使用。该大小检查主要是检查错误查询和通信信息包。通信缓冲区必须足够大,足以包含1条SQL语句(用于客户端-服务器通信)以及1行返回的数据(用于服务器-客户端通信)。每个线程的通信缓冲区将动态增加,以处理直至最大限制的任何查询或行。例如,如果BLOB值包含高达16MB的数据,那么通信缓冲区的大小限制至少为16MB(在服务器和客户端)。客户端的默认最大值为16MB,但服务器的默认最大值为1MB。也可以在启动服务器时,通过更改max_allowed_packet参数的值增加它。请参见7.5.2节,“调节服务器参数”。每次查询后,MySQL服务器会将通信缓冲区的大小降至net_buffer_length字节。对于客户端,不会降低与连接相关缓冲区大小,直至连接关闭为止,此时,客户端内存将被收回。关于使用线程的编程方法,请参见25.2.15节,“如何生成线程式客户端”。关于在相同程序创建包含“服务器”和“客户端”的独立应用程序的更多信息(不与外部MySQL服务器通信),请参见25.1节,“libmysqld,嵌入式MySQL服务器库”。25.2.1.CAPI数据类型MYSQL该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用。MYSQL_RES该结构代表返回行的查询结果(SELECT,SHOW,DESCRIBE,EXPLAIN)。在本节的剩余部分,将查询返回的信息称为“结果集”。MYSQL_ROW这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据,不能将其当作由Null终结的字符串对待,这是因为这类值可能会包含Null字节)。行是通过调用mysql_fetch_row()获得的。MYSQL_FIELD该结构包含关于字段的信息,如字段名、类型和大小。这里详细介绍了其成员。通过重复调用mysql_fetch_field(),可为每个字段获得MYSQL_FIELD结构。字段值不是该结构的组成部份,它们包含在MYSQL_ROW结构中。MYSQL_FIELD_OFFSET这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号,从0开始。my_ulonglong用于行数以及mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()的类型。该类型提供的范围为0~1.84e19。在某些系统上,不能打印类型my_ulonglong的值。要想打印这类值,请将其转换为无符号长整数类型并使用%lu打印格式,例如:printf(Numberofrows:%lu\n,(unsignedlong)mysql_num_rows(result));下面列出了MYSQL_FIELD结构包含的成员:·char*name字段名称,由Null终结的字符串。如果用AS子句为该字段指定了别名,名称的值也是别名。·char*org_name段名称,由Null终结的字符串。忽略别名。·char*table包含该字段的表的名称,如果该字段不是计算出的字段的话。对于计算出的字段,表值为空的字符串。如果用AS子句为该表指定了别名,表的值也是别名。·char*org_table表的名称,由Null终结的字符串。忽略别名。·char*db字段源自的数据的名称,由Null终结的字符串。如果该字段是计算出的字段,db为空的字符串。·char*catalogcatalog名称。该值总是def。·char*def该字段的默认值,由Null终结的字符串。仅当使用mysql_list_fields()时才设置它。·unsignedlonglength字段的宽度,如表定义中所指定的那样。·unsignedlongmax_length用于结果集的字段的最大宽度(对于实际位于结果集中的行,最长字段值的长度)。如果使用mysql_store_result()或mysql_list_fields(),它将包含字段的最大长度。如果使用mysql_use_result(),该变量的值为0。·unsignedintname_length名称的长度。·unsignedintorg_name_lengthorg_name的长度。·unsignedinttable_length表的长度。·unsignedintorg_table_lengthorg_table的长度。·unsignedintdb_lengthdb的长度。·unsignedintcatalog_lengthcatalog的长度。·unsignedintdef_lengthdef的长度。·unsignedintflags用于字段的不同“位标志”。标志的值可以有0个或多个下述位集合:标志值标志描述NOT_NULL_FLAG字段不能为NULLPRI_KEY_FLAG字段是主键的组成部分UNIQUE_KEY_FLAG字段是唯一键的组成部分MULTIPLE_KEY_FLAG字段是非唯一键的组成部分UNSIGNED_FLAG字段具有UNSIGNED属性ZEROFILL_FLAG字段具有ZEROFILL属性BINARY_FLAG字段具有BINARY属性AUTO_INCREMENT_FLAG字段具有AUTO_INCREMENT属性ENUM_FLAG字段是ENUM(不再重视)SET_FLAG字段是SET(不再重视)BLOB_FLAG字段是BLOB或TEXT(不再重视)TIMESTAMP_FLAG字段是TIMESTAMP(不再重视)不再重视BLOB_FLAG、ENUM_FLAG、SET_FLAG和TIMESTAMP_FLAG标志,原因在于,它们指出了字段的类型,而不是类型的属性。更可取的方式是使用MYSQL_TYPE_BLOB、MYSQL_TYPE_ENUM、MYSQL_TYPE_SET或MYSQL_TYPE_TIMESTAMP测试field-type。在下面的示例中,介绍了标志值的典型用法:if(field-flags&NOT_NULL_FLAG)printf(Fieldcan'tbenull\n);可以使用下述方面的宏来定义标志值的布尔状态:标志状态描述IS_NOT_NULL(flags)如果该字段定义为NOTNULL,为“真”。IS_PRI_KEY(flags)如果该字段是主键,为“真”。IS_BLOB(flags)如果该字段是BLOB或TEXT,为“真”(不再重视,用测试field-type取而代之)。·unsignedintdecimals用于数值字段的十进制数数目。·unsignedintcharset_nr用于字段的字符集编号。·enumenum_field_typestype字段的类型。类型值可以是下标所列的MYSQL_TYPE_符号之一:类型值类型描述MYSQL_TYPE_TINYTINYINT字段MYSQL_TYPE_SHORTSMALLINT字段MYSQL_TYPE_LONGINTEGER字段MYSQL_TYPE_INT24MEDIUMINT字段MYSQL_TYPE_LONGLONGBIGINT字段MYSQL_TYPE_DECIMALDECIMAL或NUMERIC字段MYSQL_TYPE_NEWDECIMAL精度数学DECIMAL或NUMERICMYSQL_TYPE_FLOATFLOAT字段MYSQL_TYPE_DOUBLEDOUBLE或REAL字段MYSQL_TYPE_BITBIT字段MYSQL_TYPE_TIMESTAMPTIMESTAMP字段MYSQL_TYPE_DATEDATE字段MYSQL_TYPE_TIMETIME字段MYSQL_TYPE_DATETIMEDATETIME字段MYSQL_TYPE_YEARYEAR字段MYSQL_TYPE_STRINGCHAR字段MYSQL_TYPE_VAR_STRINGVARCHAR字段MYSQL_TYPE_BLOBBLOB或TEXT字段(使用max_length来确定最大长度)MYSQL_TYPE_SETSET字段MYSQL_TYPE_ENUMENUM字段MYSQL_TYPE_GEOMETRYSpatial字段MYSQL_TYPE_NULLNULL-type字段MYSQL_TYPE_CHAR不再重视,用MYSQL_TYPE_TINY取代可以使用IS_NUM()宏来测试字段是否具有数值类型。将类型值传递给IS_NUM(),如果字段为数值类型,会将其评估为“真”:if(IS_NUM(field-type))printf(Fieldisnumeric\n);25.2.2.CAPI函数概述这里归纳了CAPI可使用的函数,并在下一节详细介绍了它们。请参见25.2.3节,“CAPI函数描述”。函数描述mysql_affected_rows()返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。mysql_autocommit()切换autocommit模式,ON/OFFmysql_change_user()更改打开连接上的用户和数据库。mysql_charset_name()返回用于连接的默认字符集的名称。mysql_close()关闭服务器连接。mysql_commit()提交事务。mysql_connect()连接到MySQL服务器。该函数已不再被重视,使用mysql_real_connect()取代。mysql_create_db()创建数据库。该函数已不再被重视,使用SQL语句CREATEDATABASE取而代之。mysql_data_seek()在查询结果集中查找属性行编号。mysql_debug()用给定的字符串执行DBUG_PUSH。mysql_drop_db()撤销数据库。该函数已不再被重视,使用SQL语句DROPDATABASE取而代之。mysql_dump_debug_info()让服务器将调试信息写入日志。mysql_eof()确定是否读取了结果集的最后一行。该函数已不再被重视,可以使用mysql_errno()或mysql_error()取而代之。mysql_errno()返回上次调用的MySQL函数的错误编号。mysql_error()返回上次调用的MySQL函数的错误消息。mysql_escape_str
本文标题:Mysql C 帮助手册
链接地址:https://www.777doc.com/doc-4941827 .html