环境:win7+vs2015 + MySQL5.7 x64
注:本例子中使用的MySQL中自带的world表
在开始代码前,需要在项目属性->配置属性->VC++目录中包含MySQL的include目录,在库目录中包含MySQL的lib目录,如下图所示
#include "stdafx.h"
#include "iostream"
#include <cstdlib>
#include "mysql.h"
#pragma comment(lib, "libmysql.lib")
using namespace std;
//======================================================//
// MYSQL * STDCALL 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 clientflag); //
//======================================================//
CONST CHAR* host = "localhost";
CONST CHAR* uesr = "Captain"; // 用户名
CONST CHAR* passwd = "Captain"; // 密码
CONST CHAR* db = "world"; // 表名
CONST UINT port = 3306; // 端口号
int main()
{
MYSQL mysql;
MYSQL_ROW sql_row;
MYSQL_RES* result = NULL;
MYSQL_FIELD* fd = NULL;
if (!mysql_init(&mysql))
{
cout << "mysql_init failed!" << endl;
return -1;
}
if (!mysql_real_connect(&mysql, host, uesr, passwd, db, port, 0, 0))
{
UINT i = mysql_errno(&mysql);
CONST CHAR* s = mysql_error(&mysql);
cout << s << endl;
cout << "Connection to MySQL failed!" << endl;
return 0;
}
cout << "Connection to MySQL successed!" << endl;
INT res = 0;
my_ulonglong affected_count = 0;
// 设置编码格式,否则在cmd下无法显示中文
// mysql_query(&mysql, "SET NAMES GBK");
// 发送以NULL结尾的sql查询语句
res = mysql_query(&mysql, "select id,name,countrycode from city where district='henan'");
if (res && mysql_errno(&mysql))
{
cout << "mysql_query failed!" << endl;
cout << "Error" << mysql_errno(&mysql) << ":" << mysql_error(&mysql) << '\n' << endl; // 打印错误码及内容
return 0;
}
// 检索完整的结果集到客户端
result = mysql_store_result(&mysql);
if (!result && mysql_errno(&mysql))
{
cout << "mysql_store_result failed!" << endl;
cout << "Error" << mysql_errno(&mysql) << ":" <<mysql_error(&mysql) << '\n' << endl; // 打印错误码及内容
}
// 打印结果集中获取到的行数
cout << "numbers of result: " << (my_ulonglong)mysql_num_rows(result) << endl;
UINT i, j;
char colName[30][30] = { 0 };
// 通过重复调用mysql_fetch_field(),可以按顺序访问行内的字段信息
for (i = 0; fd = mysql_fetch_field(result); i++)
{
strcpy_s(colName[i], fd->name);
}
j = mysql_num_fields(result); // 获取结果集中的列数
for (i = 0; i < j; i++)
{
printf("%s\t\t", colName[i]);
}
printf("\n");
while (sql_row = mysql_fetch_row(result)) // 从结果集中获取下一行内容
{
/*mysql_fetch_lengths()仅对结果集的当前行有效。
*如果在调用mysql_fetch_row()之前或检索了结果集中的所有行后调用了
*它,将返回NULL */
//ULONG* len = mysql_fetch_lengths(result);
//for (i = 0; i < j; i++)
//{
// printf("Column %u is %lu bytes in length.\n", i, len[i]);
//}
for (i = 0; i < j; i++)
{
printf("%s\t\t", sql_row[i]);
}
printf("\n");
}
if (result != NULL) mysql_free_result(result); // 释放资源
mysql_close(&mysql); // 断开连接
return 0;
}