您的位置:首页 > 数据库 > MySQL

关于mysql的 C API 的常用用法

2015-05-07 13:11 323 查看
C API 代码是随MySQL发布的, 它被包含在mysqlclient库且允许C程序存取一个数据库。

具体每个MySql C API 的函数解释 以及参数作用可以参考http://m.blog.csdn.net/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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: