mysql c api

这里归纳了C API可使用的函数,并在下一节详细介绍了它们。
函数 描述
mysql_affected_rows() 返 回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。
mysql_autocommit() 切换 autocommit模式,ON/OFF
mysql_change_user() 更改打开连接上的用户和数据库。
mysql_charset_name() 返 回用于连接的默认字符集的名称。
mysql_close() 关闭服务器连接。
mysql_commit() 提 交事务。
mysql_connect() 连接到MySQL服务器。该函数已不再被重视,使用 mysql_real_connect()取代。
mysql_create_db() 创建数据库。该函数已不再被重视,使用 SQL语句CREATE DATABASE取而代之。
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() 返回上次调用的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_client_version() 以 整数形式返回客户端版本信息。
mysql_get_host_info() 返回描述连接的字符串。
mysql_get_server_version() 以 整数形式返回服务器的版本号。
mysql_get_proto_info() 返回连接所使用的协议版本。
mysql_get_server_info() 返 回服务器的版本号。
mysql_info() 返回关于最近所执行查询的信息。
mysql_init() 获 取或初始化MYSQL结构。
mysql_insert_id() 返回上一个查询为AUTO_INCREMENT列生成的ID。
mysql_kill() 杀 死给定的线程。
mysql_library_end() 最终确定MySQL C API库。
mysql_library_init() 初 始化MySQL C API库。
mysql_list_dbs() 返回与简单正则表达式匹配的数据库名称。
mysql_list_fields() 返 回与简单正则表达式匹配的字段名称。
mysql_list_processes() 返回当前服务器线程的列表。
mysql_list_tables() 返 回与简单正则表达式匹配的表名。
mysql_more_results() 检查是否还存在其他结果。
mysql_next_result() 在 多语句执行过程中返回/初始化下一个结果。
mysql_num_fields() 返回结果集中的列数。
mysql_num_rows() 返 回结果集中的行数。
mysql_options() 为mysql_connect()设置连接选项。
mysql_ping() 检 查与服务器的连接是否工作,如有必要重新连接。
mysql_query() 执行指定为“以Null终结的字符串”的SQL查询。
mysql_real_connect() 连 接到MySQL服务器。
mysql_real_escape_string() 考虑到连接的当前字符集,为了在SQL语句中使 用,对字符串中的特殊字符进行转义处理。
mysql_real_query() 执行指定为计数字符串的SQL查询。
mysql_refresh() 刷 新或复位表和高速缓冲。
mysql_reload() 通知服务器再次加载授权表。 mysql_rollback() 回 滚事务。
mysql_row_seek() 使用从mysql_row_tell()返回的值,查找结果集中的行偏移。
mysql_row_tell() 返 回行光标位置。
mysql_select_db() 选择数据库。
mysql_server_end() 最 终确定嵌入式服务器库。
mysql_server_init() 初始化嵌入式服务器库。
mysql_set_server_option() 为 连接设置选项(如多语句)。
mysql_sqlstate() 返回关于上一个错误的SQLSTATE错误代码。
mysql_shutdown() 关 闭数据库服务器。
mysql_stat() 以字符串形式返回服务器状态。
mysql_store_result() 检 索完整的结果集至客户端。
mysql_thread_id() 返回当前线程ID。
mysql_thread_safe() 如 果客户端已编译为线程安全的,返回1。
mysql_use_result() 初始化逐行的结果集检索。
mysql_warning_count() 返 回上一个SQL语句的告警数。  

1. 通过调用mysql_library_init(),初始化MySQL库。库可以是mysqlclient C客户端库,或mysqld嵌入式服务器库,具体情况取决于应用程序是否与“-libmysqlclient”或“-libmysqld”标志链接。

2. 通过调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器。

3. 发出SQL语句并处理其结果。(在下面的讨论中,详细介绍了使用它的方法)。

4. 通过调用mysql_close(),关闭与MySQL服务器的连接。

5. 通过调用mysql_library_end(),结束MySQL库的使用。

调用 mysql_library_init()和mysql_library_end()的目的在于,为MySQL库提供恰当的初始化和结束处理。对于与客户 端库链接的应用程序,它们提供了改进的内存管理功能。如果不调用mysql_library_end(),内存块仍将保持分配状态(这不会增加应用程序使 用的内存量,但某些内存泄漏检测器将抗议它)。对于与嵌入式服务器链接的应用程序,这些调用会启动并停止服务器。

mysql_library_init() 和mysql_library_end()实际上是#define符号,这类符号使得它们等效于mysql_server_init()和 mysql_server_end(),但其名称更清楚地指明,无论应用程序使用的是mysqlclient或mysqld库,启动或结束MySQL库 时,应调用它们。对于早期的MySQL版本,可调用mysql_server_init()和mysql_server_end()取而代之。

如 果愿意,可省略对mysql_library_init()的调用,这是因为,必要时,mysql_init()会自动调用它。

要 想连接到服务器,可调用mysql_init()来初始化连接处理程序,然后用该处理程序(以及其他信息,如主机名、用户名和密码)调用 mysql_real_connect()。建立连接后,在低于5.0.3版的API中,mysql_real_connect()会将再连接标志 (MYSQL结构的一部分)设置为1,或在较新的版本中,将其设置为0。对于该标志,值“1”指明,如果因连接丢失而无法执行语句,放弃之前,会尝试再次 连接到服务器。从MySQL 5.0.13开始,可以在mysql_options()上使用MYSQL_OPT_RECONNECT选项,以控制再连接行为。完成连接后,调用 mysql_close()中止它。

当连接处于活动状态时,客户端或许会使用 mysql_query()或mysql_real_query()向服务器发出SQL查询。两者的差别在于,mysql_query()预期的查询为指 定的、由Null终结的字符串,而mysql_real_query()预期的是计数字符串。如果字符串包含二进制数据(其中可能包含Null字节),就 必须使用mysql_real_query()。

对于每个非SELECT查询(例如INSERT、 UPDATE、DELETE),通过调用mysql_affected_rows(),可发现有多少行已被改变(影响)。

对 于SELECT查询,能够检索作为结果集的行。注意,某些语句因其返回行,类似与SELECT。包括SHOW、DESCRIBE和EXPLAIN。应按照 对待SELECT语句的方式处理它们。

客户端处理结果集的方式有两种。一种方式是,通过调用 mysql_store_result(),一次性地检索整个结果集。该函数能从服务器获得查询返回的所有行,并将它们保存在客户端。第二种方式是针对客 户端的,通过调用mysql_use_result(),对“按行”结果集检索进行初始化处理。该函数能初始化检索结果,但不能从服务器获得任何实际行。

在 这两种情况下,均能通过调用mysql_fetch_row()访问行。通过 mysql_store_result(),mysql_fetch_row()能够访问以前从服务器获得的行。通过 mysql_use_result(),mysql_fetch_row()能够实际地检索来自服务器的行。通过调用 mysql_fetch_lengths(),能获得关于各行中数据大小的信息。

完成结果集操作 后,请调用mysql_free_result()释放结果集使用的内存。

这两种检索机制是互补 的。客户端程序应选择最能满足其要求的方法。实际上,客户端最常使用的是mysql_store_result()。

mysql_store_result() 的1个优点在于,由于将行全部提取到了客户端上,你不仅能连续访问行,还能使用mysql_data_seek()或mysql_row_seek()在 结果集中向前或向后移动,以更改结果集内当前行的位置。通过调用mysql_num_rows(),还能发现有多少行。另一方面,对于大的结果 集,mysql_store_result()所需的内存可能会很大,你很可能遇到内存溢出状况。

mysql_use_result() 的1个优点在于,客户端所需的用于结果集的内存较少,原因在于,一次它仅维护一行(由于分配开销较低,mysql_use_result()能更快)。它 的缺点在于,你必须快速处理每一行以避免妨碍服务器,你不能随机访问结果集中的行(只能连续访问行),你不知道结果集中有多少行,直至全部检索了它们为 止。不仅如此,即使在检索过程中你判定已找到所寻找的信息,也必须检索所有的行。

通过API,客户 端能够恰当地对查询作出响应(仅在必要时检索行),而无需知道查询是否是SELECT查询。可以在每次mysql_query()或 mysql_real_query()后,通过调用mysql_store_result()完成该操作。如果结果集调用成功,查询为SELECT,而且 能够读取行。如果结果集调用失败,可调用mysql_field_count()来判断结果是否的确是所预期的。如果 mysql_field_count()返回0,查询不返回数据(表明它是INSERT、UPDATE、DELETE等),而且不返回行。如果 mysql_field_count()是非0值,查询应返回行,但没有返回行。这表明查询是失败了的SELECT。关于如何实现该操作的示例,请参见关 于mysql_field_count()的介绍。

无论是 mysql_store_result()还是mysql_use_result(),均允许你获取关于构成结果集的字段的信息(字段数目,它们的名称和 类型等)。通过重复调用mysql_fetch_field(),可以按顺序访问行内的字段信息,或者,通过调用 mysql_fetch_field_direct(),能够在行内按字段编号访问字段信息。通过调用mysql_field_seek(),可以改变当 前字段的光标位置。对字段光标的设置将影响后续的mysql_fetch_field()调用。此外,你也能通过调用 mysql_fetch_fields(),一次性地获得关于字段的所有信息。

为了检测和通报错 误,MySQL提供了使用mysql_errno()和mysql_error()函数访问错误信息的机制。它们能返回关于最近调用的函数的错误代码或错 误消息,最近调用的函数可能成功也可能失败,这样,你就能判断错误是在何时出现的,以及错误是什么。

时间: 2024-07-31 20:02:56

mysql c api的相关文章

MySQL基础及MySQL C API编程

MySQL基础及MySQL C API编程 一.MySQL For Windows安装: 1. 下载: 上官网下载即可: http://www.mysql.com/downloads/ 2. 安装: 没有什么好说的,傻瓜式,也没有什么要注意的. 3. 配置: 添加系统变量MYSQL_HOME和修改PATH,目的就是让系统默认能够找到MySQL命令.(安装目录的/bin下面) PS: 补充一下,有的朋友可能下载的是免安装版本,拷贝到一个地方就可以了,这个时候,配置还是需要的,但是配置完成之后,需要

mysql C API 字符串玩转备份调优

unique(唯一性),primary key(not null and 唯一 unique) 导出整个数据库,单个数据库,数据库下的某张表,N张表; 导出数据库表结构 mysqldump -u -p -d --add-drop-table>ruiy.sql; MySQL C API简单操作

数据库编程5 MySQL C API 开发

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 数据库编程5 MySQL C API 开发 MySQL官方文档: MySQL  环境搭建 ubuntu搭建MySQL开发环境: MySQL服务命令 检查MySQL运行状态: MySQL SQL 登陆测试 创建一个数据库 显示数据库创建过程: 创建一个使用UTF8字符集的数据库 创建一个使用UTF8字符集的数据库,带校对规则 把数据库修改成UTF8字符集 选择数据库,创建表: 查表结构: mysql中的数据类型

c++使用mysql的api连接相关问题

记录一下自己使用中的相关问题,方便有相同问题的同学解决. 关于在VS中的各种配置.看这里.只是须要注意一下,我如今用的mysql版本号是5.6的,已经没有[MySQL Server \lib\opt]这个路径了.将这一项设置到[MySQL Server \lib]就可以 假设出现例如以下错误: 1>main.obj : error LNK2019: 无法解析的外部符号 [email protected],该符号在函数 _main 中被引用 1>main.obj : error LNK2019:

The MySQL C API 编程实例

在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有所帮助,附例中的环境为RedHat 在这篇文章里,我们将学会怎么使用MySQL 的C APIs(Application Programming Interfaces 编程接口).为了非常好地了解这篇文章,您须要具备下面前提知识: C语言变量 C语言函数 C语言指针 简单介绍 C APIs包括在mysqlcli

MySQL编程API

1.MySQL API数据结构 MySQL API中用到了很多结构体类型,下面就简单说一下常用的结构体. MYSQL 连接数据库前,必须先创建MYSQL变量,此变量在很多MySQL API函数中会用到,它包含了一些连接信息等数据. MYSQL_RES MYSQL_RES结构体中包含了查询结果集,也就是从数据库中查询到的数据.可以使用mysql_store_result或mysql_user_result函数获得. MYSQL_ROW typedef char **MYSQL_ROW,可见,它实际

python3+Django1.11+mysql5.7 MySQL DB API Drivers

The Python Database API is described in PEP 249. MySQL has three prominent drivers that implement this API: MySQLdb is a native driver that has been developed and supported for over a decade by Andy Dustman. mysqlclient is a fork of MySQLdb which not

Mysql C API 字母顺序整理

头文件:#include<mysql.h>C API数据类型:下面是mysql.h头文件中的C API数据类型列表:MYSQLmysql_init()创建的数据库句柄结构,可以使用mysql_close()释放内存.MYSQL_RES从SQL查询语句获取的查询结果集的结构.取回函数会用到这个数据类型,可以使用mysql_free_result()释放内存.MYSQL_ROW该结构用于存放结果集的行数据.使用函数mysql_fetch_row()可检索该结构中的数据.MYSQL_FIELD该结构

mysql c api 编程(一)

#include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h> int main() {    MYSQL *conn;    MYSQL_RES *res;    MYSQL_ROW row; char *server = "localhost";    char *user = "root";    char *password = "[email prot