MySQL C语言API

1、MYSQL *mysql_init(MYSQL *mysql)
   为mysql_real_connect()分配或初始化一个MYSQL对象。若mysql为NULL,函数为其分配,初始化并返回一个新对象;否则对象被初始化并返回该对象的地址。
   返回值:一个被初始化了的MYSQL* handle,若内存不足返回NULL。
 
 
2、int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)
   为连接设置一些连接项。必须在mysql_init()之后,mysql_real_connect()之前调用该函数。
 
 
3、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)
   试图与运行在host上的mysql数据库建立一个连接。在调用该函数之前,必须先调用mysql_init()初始化MYSQL结构体。
   返回值:连接成功返回A MYSQL* connection handle,连接失败返回NULL。
 
 
4、int mysql_query(MYSQL *mysql, const char *stmt_str)
   执行由stmt_str指向的SQL语句。不能执行包含二进制的数据(字符“\0”是二进制数据),但mysql_real_query()可以;通常使用单独的SQL语句(不带“;”的),也可调用mysql_real_connect() 或mysql_set_server_option()指定以分号分隔的多个SQL语句
   返回值:SQL语句执行成功返回0,出错返回非0。
 
 
5、int mysql_real_query(MYSQL *mysql, const char *stmt_str, unsigned long length)
   length是字符串stmt_str的字节数。除能执行二进制的SQL语句外,其他与mysql_query()相同。
 
 
6、MYSQL_RES *mysql_use_result(MYSQL *mysql)
   在调用mysql_query()或mysql_real_query()之后,必须调用mysql_store_result()或mysql_use_result()才能产生一个结果集,在完成对结果集的处理之后,必须调用mysql_free_result()释放结果集
   初始化一个结果集检索,但并不像mysql_store_result()那样把结果集读到client,而是通过调用mysql_fetch_row()进行逐行检索,直到返回一个NULL,直接从server读取,节省时间和空间
   返回值:成功返回一个MYSQL_RES结构体,出错返回NULL
 
 
7、MYSQL_RES *mysql_store_result(MYSQL *mysql)
   同mysql_use_result()
 

8、int mysql_next_result(MYSQL *mysql)
   该函数用来在由多个SQL语句构成的单独语句字符串时执行。在每次调用该函数之前,一定要使用  mysql_free_result()释放当前的语句的结果集。
 

9、MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
   检索结果集中的下一行,使用完mysql_store_result()后,无要检索的行返回NULL。使用完mysql_use_result()后,无要检索的行或出错返回NULL。
   每行的值的个数可由mysql_num_fields(result)获知,如果row保存mysql_fetch_row()的返回值,则指向值的指针是row[0] to row[mysql_num_fields(result)-1],空值由NULL指向
   返回值:成功返回下一行的MYSQL_ROW structure,出错或没有要检索的行返回NULL
 
 
10、void mysql_close(MYSQL *mysql)
   关闭先前打开的连接,同时也释放由mysql指向的连接handle,若handle是由mysql_init() or mysql_connect()分配的。


详细说明请参阅官网:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-functions

函数

描述

mysql_affected_rows()

返回上次UPDATEDELETEINSERT查询更改/删除/插入的行数。

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语句的告警数。



 //下面是一个实例
#include<iostream>
#include<string>
#include"mysql.h"
using namespace std;

//#define STEPBYSTEP

int main()
{
	cout << "**************************C++ MySQL API Test************************" << endl;

#ifdef STEPBYSTEP
	system("pause");
#endif


	//必备的一个数据结构
	MYSQL mydata;


	//初始化数据库
	if (0 == mysql_library_init(0, NULL, NULL))
		cout << "mysql_library_init succees" << endl;
	else
		cout << "mysql_library_init() failed" << endl;


#ifdef STEPBYSTEP
	system("pause");
#endif


	//初始化mysql数据结构
	if (NULL != mysql_init(&mydata))
		cout << "mysql_init() succeed" << endl;
	else {
		cout << "mysql_init() failed" << endl;
		return -1;
	}

#ifdef STEPBYSTEP
	system("pause");
#endif

	//在链接数据库之前,设置额外的连接选项,可以设置的选项很多,这里设置字符集,否则无法处理中文
	if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk"))
		cout << "mysql_options succeed" << endl;
	else
	{
		cout << "mysql_options() failed" << endl;
		return -1;
	}


#ifdef STEPBYSTEP
	system("pause");
#endif


	//链接数据库
	if (NULL != mysql_real_connect(&mydata, "localhost", "root", "dujian1..", "test", 3306, NULL, 0))
		cout << "mysql_real_connect() succeed" << endl;
	else {
		cout << "mysql_real_connect() failed" << endl;
		return -1;
	}

#ifdef STEPBYSTEP
	system("pause");
#endif



	//字符串
	string sqlstr;

	//创建一个表
	sqlstr = "CREATE TABLE IF NOT EXISTS user_info";
	sqlstr += "(";
	sqlstr += "user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";
	sqlstr += "user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";
	sqlstr += "user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The Summation Of Using Time'";
	sqlstr += ")";



	if (0 == mysql_query(&mydata, sqlstr.c_str()))
		cout << "mysql_query() create table succeed" << endl;
	else {
		cout << "mysql_query() create table failed" << endl;
		mysql_close(&mydata);
		return -1;
	}

#ifdef STEPBYSTEP
	system("pause");
#endif

	//向表中插入数据
	sqlstr = "insert into user_info(user_name) values('公司名称'),('一级部门'),('二级部门'),('开发小组'),('姓名')";
	if (0 == mysql_query(&mydata, sqlstr.c_str()))
		cout << "mysql_query() insert data succeed" << endl;
	else
	{
		cout << "mysql_query() insert data failed" << endl;
		mysql_close(&mydata);
		return -1;
	}

#ifdef STEPBYSTEP
	system("pause");
#endif

	//显示刚才插入的数据
	sqlstr = "select user_id,user_name,user_second_sum from user_info";
	MYSQL_RES *result = 0; //返回结果集
	
	if (0 == mysql_query(&mydata, sqlstr.c_str()))
	{
		cout << "mysql_query() select data succeed" << endl;

		//一次性取得数据集
		result = mysql_store_result(&mydata);
		int rowcount = mysql_num_rows(result);
		cout << "row count: " << rowcount << endl;


		//取得并打印各字段的名字
		unsigned int fieldcount = mysql_num_fields(result);
		MYSQL_FIELD* field ;
		for (unsigned int i = 0; i < fieldcount; i++)
		{
			field = mysql_fetch_field_direct(result, i);
			cout << field->name << "\t\t";
		}
		cout << endl;




		//打印各行
		MYSQL_ROW row = 0;
		row = mysql_fetch_row(result);
		while (NULL != row) {
			for (int i = 0; i < fieldcount; i++)
				cout << row[i] << "\t\t";
			cout << endl;
			row = mysql_fetch_row(result);
		}

	}
	else
	{
		cout << "mysql_query() select failed" << endl;
		mysql_close(&mydata);
		return -1;
	}

#ifdef STEPBYSTEP
	system("pause");
#endif


	//删除刚才建的表
	sqlstr = "drop table user_info";
	if (0 == mysql_query(&mydata, sqlstr.c_str()))
		cout << "mysql_query() drop table succeed" << endl;
	else
	{
		cout << "mysql_query() drop table failed" << endl;
		mysql_close(&mydata);
		return -1;
	}
	mysql_free_result(result);
	mysql_close(&mydata);
	mysql_server_end();


	system("pause");
	return 0;
}
工程配置参考:http://lddyw.blog.51cto.com/4151746/1576549/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值