关于mysql的 C API 的常用用法

本文详细介绍了MySQL CAPI及其数据结构,包括MYSQL、MYSQL_RES、MYSQL_ROW、MYSQL_FIELD等,同时提供了常用API函数的解释及示例代码,帮助开发者更好地与MySQL数据库进行交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C API 代码是随MySQL发布的, 它被包含在mysqlclient库且允许C程序存取一个数据库。


具体每个MySql C API 的函数解释  以及参数作用可以参考http://m.blog.youkuaiyun.com/blog/zxh2075/19285685


首先看一下数据结构

MYSQL  这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。

MYSQL_RES 这个结构代表返回行的一个查询的结果。 从查询返回的信息称为结果集合

MYSQL_ROW 这是一个行数据的类型安全(type-safe)的表示。当前他实现为一个计数字节的字符串数组。

MYSQL_FIELD 这个结构包含字段信息, 例如字段名, 类型  和大小。  可以通过重复调用mysql_fetch_field()对每一列获得MYSQL_FIELD结构。字段值不是这个结构的部分,它们被包含在MYSQL_ROW结构中。


以下是其中常用的api函数

mysql_affected_rows() 返回被最新的update, delete或 insert 查询影响的行数。

mysql_close() 关闭一个服务器连接

mysql_erro() 返回最近被调用的MySQL函数的出错编号

mysql_fetch_row() 从结果集合中取得下一行

mysql_field_count() 返回最近查询的结果列的数量

mysql_init() 获得或初始化一个MySQL结构。

mysql_num_Rows() 返回一个结果集合中的行的数量。

mysql_query() 执行指定为一个空结尾的字符串的SQL查询

mysql_real_connect() 连接一个MySQL服务器

mysql_real_query() 执行指定为带技术的字符串的SQL查询


字段类型。 类型值可以是下标所列的MYSQL_TYOE符号之一

MYSQL_TYPE_TINY TINYINT类型

MYSQL_TYPE_SHORT SMALLINT类型

MYSQL_TYPE_LONG INTEGER类型

MYSQL_TYPE_INT24 MEDIUMINT字段

MYSQL_TYPE_LONGLONG BIGINT字段

MYSQL_TYPE_DECIMAL DECIMAL或NUMERIC字段

MYSQL_TYPE_FLOAT FLOAT字段

MYSQL_TYPE_DOUBLE DOUBLE或REAL字段

MYSQL_TYPE_BIT BIT字段

MYSQL_TYPE_TImESTAMP TIMESTAMP字段

MYSQL_TYPE_DATE DATE字段

MYSQL_TYPE_TIME TIME字段

MYSQL_TYPE_DATETIME DATETIME字段

MYSQL_TYPE_YEAR YEAR字段

MYSQL_TYPE_STRING VARCHAR字段

MYSQL_TYPE_BLOB BLOB或TEXT字段

MYSQL_TYPE_SET SET字段

MYSQL_TYPE_ENUM ENUM字段

MYSQL_TYPE_GEOMETRY Spatial字段

MYSQL_TYPE_NULL NULL_type字段

MYSQL_TYPE_CHAR 不再重现,用MYSQL_TYPE_TINY取代


与MySql交互时,的一般原则

1 通过调用mysql_library_init(), 初始化MySql库。

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

3 发出SQL语句并处理其内容

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

5 通过调用mysql_library_end(), 结束MySql库的使用


上面都是理论,程序员还是要通过代码看本质。 一下举几个例子


一  连接数据库, 并执行简单的查询语句

在写连接MySQL数据库之前要把配置先搞好,具体搞法先看下这个链接http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html

之后的例子中我会具体说明

#include <iostream>
#include <WinSock2.h>
#include <Windows.h>
#include "mysql.h"

MYSQL* con;		// 数据库的连接句柄
MYSQL_RES* res;	// 查询的结果集合
MYSQL_ROW row;	// 行数据

int main()
{
	char szTmp[512];
	char szUser[30] = "root";
	char szPasswd[30] = "123456";
	char szIp[30] = "localhost";			// 这个位置的ip必须与你的数据库的ip一致
	char szDBName[30] = "fktestdb";

	// 初始化连接句柄
	con = mysql_init((MYSQL*)0);
	if (con == NULL) return 0;
	// 连接Mysql
	MYSQL* pTmp = mysql_real_connect(con, szIp, szUser, szPasswd, szDBName, 3306, NULL, 0);
	if (pTmp == NULL) return 0;

	// 查询语句
	strcpy(szTmp, "select * from mcftest");
	int rt = mysql_real_query(con, szTmp, strlen(szTmp) );

	res = mysql_store_result(con);		// 将结果保存在res的结构体中

	// mysql_data_seek(res, 0);<span style="white-space:pre">	这个函数设置当前光标在第几行</span>
	row = mysql_fetch_row(res);			// 开始光标是在第一行的所以不需要设置
	printf("id:%d\n", atoi(row[0]));
	// mysql_fetch_field(res);
	row = mysql_fetch_row(res);			// 每调用一次mysql_fetch_row() 光标就往下走一步
	printf("id:%d\n", atoi(row[0]));
	row = mysql_fetch_row(res);
	printf("id:%d\n", atoi(row[0]));
	getchar();
	return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值