返回值:一个被初始化了的MYSQL* handle,若内存不足返回NULL。
返回值:连接成功返回A MYSQL* connection handle,连接失败返回NULL。
返回值:SQL语句执行成功返回0,出错返回非0。
初始化一个结果集检索,但并不像mysql_store_result()那样把结果集读到client,而是通过调用mysql_fetch_row()进行逐行检索,直到返回一个NULL,直接从server读取,节省时间和空间
返回值:成功返回一个MYSQL_RES结构体,出错返回NULL
每行的值的个数可由mysql_num_fields(result)获知,如果row保存mysql_fetch_row()的返回值,则指向值的指针是row[0] to row[mysql_num_fields(result)-1],空值由NULL指向
返回值:成功返回下一行的MYSQL_ROW structure,出错或没有要检索的行返回NULL
详细说明请参阅官网:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c-api-functions
函数 | 描述 |
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语句的告警数。 |
//下面是一个实例
#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/