A: mysql_init()——分配或初始化与mysql_real_connect()相适应的MYSQL对象。
MYSQL* mysql_init(MYSQL* mysql);
补充:如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,应当在程序中调用mysql_close() 来关闭连接,以释放对象。
B: mysql_options()——用于设置额外的连接选项并影响连接的行为,可多次调用此函数来设置多个选项。
int mysql_options(MYSQL* mysql,enum mysql_option,const void* arg);
补充:在mysql_init()之后与mysql_real_connect()之前调用mysql_options()。
C: mysql_real_connect()——连接到MySQL server
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连接句柄结构的任何其它API函数之前,mysql_real_connect() 必须成功完成。
参数:“host”——必须是主机名或IP地址。如果host是NULL或字符串“localhost”,连接将被视为与本地主机连接。
“unix_socket”——通常指定为NULL
“client_flag”——通常为0,但是,也能将其设置为具有特定功能的标志组合。(详情参考:点这里)
D: mysql_query()——执行以null结尾的字符串指定的sql查询语句
int mysql_query(MYSQL* mysql,const char* stmt_str)
补充:mysql_query() 不能用于执行包含二进制数据的sql查询语句,此时,你必须使用mysql_real_query()。
如果执行成功将返回0,如果执行错误,将返回非0值。
E: mysql_store_result()——向客户端检索完整的结果集
MYSQL_RES* mysql_store_result(MYSQL* mysql)
说明:在调用mysql_query()或者mysql_real_query() 之后,你必须调用mysql_store_result()或者mysql_use_result() 对于那些成功检索了数据的每个查询(select,show,describe,explain,check table等)。
mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
调用mysql_num_rows()可以找出结果集中的行数。可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
在对结果集处理完成之后,也必须调用mysql_free_result()函数释放内存。
F: mysql_use_result()——启动逐行结果集检索
MYSQL_RES* mysql_use_result(MYSQL* mysql)
说明:mysql_use_result() 不像mysql_store_result() 那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row() 的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存到临时表或本地缓冲区内,与mysql_store_result() 相比,速度更快而且使用的内存更少。使用mysql_use_result() 时,必须执行mysql_fetch_row() ,直至返回NULL值。
G: mysql_fetch_row()——从结果集中获取下一行
MYSQL_ROW mysql_fetch_row(MYSQL_RES* result)
返回值:下一行的MYSQL_ROW结构。(如果没有更多的行可检索或者发生错误时,则返回NULL)
H: mysql_free_result()——释放结果集使用的内存
void mysql_free_result(MYSQL_RES* result)
说明:当你完成了对结果集的处理之后,你必须释放其使用的内存(通过调用mysql_free_result() 函数)。也不要尝试在释放内存之后,去获取结果集。
I: mysql_error()——返回最近调用MySQL函数发生的错误信息
const char* mysql_error(MYSQL* mysql)
返回值:描述错误信息的以null结尾的字符串,如果未发生错误,则返回空字符串。
M: mysql_close()——关闭一个server连接
void mysql_close(MYSQL* mysql)
说明:关闭前面已经打开的连接。如果句柄是由mysql_init() 或mysql_connect() 自定分配的,mysql_close() 还将解除分配由mysql指向的连接句柄。
注:在windows系统上的Vistual Studio开发环境下需要包含头文件#include
#include
#include
//MySQL库(第三方库)
#include
#pragma comment(lib,"libmysql.lib")
//全局变量声明
MYSQL mysql;
MYSQL_RES* res;
MYSQL_ROW row;
unsigned int num_fields;
//连接数据库
bool ConnectDatabase()
{
//初始化数据库
mysql_init(&mysql);
//连接到MySQL server
if((mysql_real_connect(&mysql,"127.0.0.1","root",
"Admin123456","test_sql",3306,NULL,0)))
{
printf("Error connecting to database:%s\n",mysql_error(&mysql));
return false;
}
else
{
printf("connected...\n");
return true;
}
}
//查询数据
void QueryData(std::string& query_sql_string)
{
const char* query_buffer=query_sql_string.c_str();
if(mysql_query(&mysql,query_buffer)
{
printf("Query failed(%s)\n",mysql_error(&mysql));
}
else
{
printf("Query success\n");
res=mysql_store_result(&mysql);
num_fields=mysql_num_fields(res);
while((row=mysql_fetch_row(res))!=NULL)
{
if(row[6]!=NULL)
{
std::string temp_string =ResultConvertToJson(row);
ConvertUTF8ToGBK(temp_string);
std::cout<
对于C++程序员来说,MySQL官方提供的C API(https://dev.mysql.com/doc/refman/8.0/en/c-api.html)已经能满足大多数应用场景。
如果为了追求效率和C++特性,可以选择基于此 C API进行再封装的第三方库MySQL++(https://tangentsoft.com/mysqlpp/home)