MySQL入门之常用C语言API

转自:http://blog.csdn.net/qq920020796/article/details/49250369

数据类型

  • MYSQL
    • 该结构代表1个数据库连接的句柄。几乎所有的MYSQL函数均使用它。
  • MYSQL_RES
    • 该结构代表返回行的查询结果
  • MYSQL_ROW
    • 这是1行数据的"类型安全"表示。
  • MYSQL_FIELD
    • 该结构包 含关 于字段的信息,如字段名、类型和大小等
  • MYSQL_FIELD_OFFSET
    • 这时MYSQL字段列表偏移量的"类型安全"表示
  • my_ulonglong
    • 用于行数以及mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()的类型

 

编程步骤

  • 1 通过调用mysql_library_init(),初始化MYSQL库
  • 2 通过调用mysql_init()初始化连接处理程序,并通过调用mysql_real_connect()连接到服务器
  • 3 发出SQL语句并处理其结果
  • 4 通过调用mysql_close(),关闭与MYSQL服务器的连接
  • 5 通过调用mysql_library_end(),结束MYSQL库的使用

数据库连接

  • 初始化一个连接句柄结构

#include <MySQL.h>

MYSQL *mysql_init(MYSQL *);

  • 和数据库建立物理连接

MYSQL *mysql_real_connect(MYSQL *connection,

const char *server_host,const char *sql_user_name,

const char *sql_password,const char *db_name,

unsigned int port_number,const char

*unix_socket_name,unsigned int flags);

连接参数

Int mysql_options(MYSQL *connection,enum

option_to_set,const char *argument)

 

 

错误处理

  • unsigned int mysql_errno(MYSQL *connection);

对于由mysql指定的连接,该函数返回最近调用的API函数的错误代码,该函数调用可能成功也可能失败。"0"返回值表示未出现错误

  • char *mysql_error(MYSQL *connection)

如果想获得错误的文本信息,可以调用该函数

 

执行SQL语句

  • int mysql_query(MYSQL *mysql,const char *query)
  • 功能描述:
    • 执行由"Null终结的字符串"查询指向的SQL查询。正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号或"\g"
    • 不能用于包含二进制数据的查询,应使用mysql_real_query来完成

对于操纵语句

  • My_ulonglong mysql_affected_rows(MYSQL *mysql)

返回上次操纵语句所涉及到记录的行数

  • 对于UPDATE、DELETE或INSERT语句,可在mysql_query()后立刻调用。对于SELECT语句,该函数的工作方式与mysql_num_rows()类似

对于查询语言

  • MYSQL_RES *mysql_store_result(MYSQL *mysql)
  • 功能说明:
    • 对于成功检索了数据的每个查询,必须调用mysql_store_result()或mysql_use_result()
    • 该函数将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中
    • 可以通过mysql_num_rows来找出结果集中的行数

 

事务处理

  • my_bool mysql_autocommit(MYSQL *mysql,my_bool mode)
    • 函数说明:如果模式为1,启动autocommit模式;如果模式为0,禁止autocommit模式
  • my_bool mysql_commit(MYSQL *mysql)
    • 提交当前事务
  • my_bool mysql_rollback(MYSQL *mysql)
    • 回滚当前事务

 

处理结果集

  • MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
  • 功能描述
    • 检索结果集的下一行
    • 行内值的数目由mysql_num_fields(result)给出
    • 可以调用mysql_fetch_lengths()来获得行中字段值的长度
  • void mysql_data_seek(MYSQL_RES *result,my_ulonglong offset)
  • 功能描述:
    • 在查询结果集中寻找任意行。偏移值为行号。
    • 该函数要求结果集结构包含查询的所有结果
  • MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)
    • 返回光标的当前位置
  • MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result,MYSQL_ROW_OFFSET offset)
    • 将行光标置于查询结果集中的任意行

每次接收一行数据

  • MYSQL_RES *mysql_use_result(MYSQL *mysql)
  • 功能说明:
    • 不像mysql_store_result()那样把结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。
    • Mysql_store_result()相比,速度更快而且使用的内存更少

 

多查询执行的C API处理

  • 支持在单个字符串中指定的多语句的执行。要想与给定的连接一起使用该功能,打开连接时,必须将标志参数中的CLIENT_MULTI_STATEMENTS选项指定给mysql_real_connect()。也可以通过调用mysql_set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON),为已有的连接设置它

 

 

详细api列表

MYSQL *mysql_init(MYSQL *mysql)

  •     分配或初始化与mysql_real_connect()相适应的MYSQL对象。
  • 如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。
  • 如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。

void mysql_close(MYSQL *mysql)

  • 关闭前面打开的连接。
  • 如果句柄是由mysql_init()或mysql_connect()自动分配的,mysql_close()还将解除分配由mysql指向的连接句柄。

mysql_real_connect函数

  • MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
  • 函数功能:尝试与运行在主机上的MySQL数据库引擎建立连接
  • connect = mysql_real_connect(&mysql, "localhost", "root", "123456", "mydb2", 0, NULL, 0 );

 

查询api

mysql_query()函数和mysql_real_query()函数

  • int mysql_query(MYSQL *mysql, const char *query)
  • int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
  • 对于包含二进制数据的查询,必须使用mysql_real_query()而不是mysql_query(),
  • mysql_real_query()比mysql_query()快,这是因为它不会在查询字符串上调用strlen()。
 

 

获取结果集api

mysql_store_result()函数和mysql_use_result

  • MYSQL_RES *mysql_store_result(MYSQL *mysql)
  • mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中;
  • 可调用mysql_num_rows()来找出结果集中的行数。可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
  • 一旦完成了对结果集的操作,必须调用mysql_free_result()。
 

MYSQL_RES *mysql_use_result(MYSQL *mysql) 每次接收一行数据

  • 功能说明:
  • 不像mysql_store_result()那样把结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。
  • Mysql_store_result()相比,速度更快而且使用的内存更少






mysql_affected_rows() 返回被最新的UPDATEDELETEINSERT查询影响的行数。
mysql_close() 关闭一个服务器连接。
mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
mysql_change_user() 改变在一个打开的连接上的用户和数据库。
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_host_info() 返回一个描述连接的字符串。
mysql_get_proto_info() 返回连接使用的协议版本。
mysql_get_server_info() 返回服务器版本号。
mysql_info() 返回关于最近执行得查询的信息。
mysql_init() 获得或初始化一个MYSQL结构。
mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。
mysql_kill() 杀死一个给定的线程。
mysql_list_dbs() 返回匹配一个简单的正则表达式的数据库名。
mysql_list_fields() 返回匹配一个简单的正则表达式的列名。
mysql_list_processes() 返回当前服务器线程的一张表。
mysql_list_tables() 返回匹配一个简单的正则表达式的表名。
mysql_num_fields() 返回一个结果集合重的列的数量。
mysql_num_rows() 返回一个结果集合中的行的数量。
mysql_options() 设置对mysql_connect()的连接选项。
mysql_ping() 检查对服务器的连接是否正在工作,必要时重新连接。
mysql_query() 执行指定为一个空结尾的字符串的SQL查询。
mysql_real_connect() 连接一个MySQL服务器。
mysql_real_query() 执行指定为带计数的字符串的SQL查询。
mysql_reload() 告诉服务器重装授权表。
mysql_row_seek() 搜索在结果集合中的行,使用从mysql_row_tell()返回的值。
mysql_row_tell() 返回行光标位置。
mysql_select_db() 连接一个数据库。
mysql_shutdown() 关掉数据库服务器。
mysql_stat() 返回作为字符串的服务器状态。
mysql_store_result() 检索一个完整的结果集合给客户。
mysql_thread_id() 返回当前线程的ID。
mysql_use_result() 初始化一个一行一行地结果集合的检索。
mysql_affected_rows() 返回被最新的UPDATEDELETEINSERT查询影响的行数。
mysql_close() 关闭一个服务器连接。
mysql_connect() 连接一个MySQL服务器。该函数不推荐;使用mysql_real_connect()代替。
mysql_change_user() 改变在一个打开的连接上的用户和数据库。
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_host_info() 返回一个描述连接的字符串。
mysql_get_proto_info() 返回连接使用的协议版本。
mysql_get_server_info() 返回服务器版本号。
mysql_info() 返回关于最近执行得查询的信息。
mysql_init() 获得或初始化一个MYSQL结构。
mysql_insert_id() 返回有前一个查询为一个AUTO_INCREMENT列生成的ID。
mysql_kill() 杀死一个给定的线程。
mysql_list_dbs() 返回匹配一个简单的正则表达式的数据库名。
mysql_list_fields() 返回匹配一个简单的正则表达式的列名。
mysql_list_processes() 返回当前服务器线程的一张表。
mysql_list_tables() 返回匹配一个简单的正则表达式的表名。
mysql_num_fields() 返回一个结果集合重的列的数量。
mysql_num_rows() 返回一个结果集合中的行的数量。
mysql_options() 设置对mysql_connect()的连接选项。
mysql_ping() 检查对服务器的连接是否正在工作,必要时重新连接。
mysql_query() 执行指定为一个空结尾的字符串的SQL查询。
mysql_real_connect() 连接一个MySQL服务器。
mysql_real_query() 执行指定为带计数的字符串的SQL查询。
mysql_reload() 告诉服务器重装授权表。
mysql_row_seek() 搜索在结果集合中的行,使用从mysql_row_tell()返回的值。
mysql_row_tell() 返回行光标位置。
mysql_select_db() 连接一个数据库。
mysql_shutdown() 关掉数据库服务器。
mysql_stat() 返回作为字符串的服务器状态。
mysql_store_result() 检索一个完整的结果集合给客户。
mysql_thread_id() 返回当前线程的ID。
mysql_use_result() 初始化一个一行一行地结果集合的检索。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值