【C/C++】VS连接mysql数据库

VS配置

VS连接mysql数据库首先需要先做五个步骤的配置:

1、选择x64解决方案

 2、配置包含目录

 项目 -> 属性 -> VC++目录 -> 包含目录

找到你mysql的安装目录,把MYSQL Server x.x 目录下的 include 目录的路径添加进这个包含目录里。

 3、配置库目录

项目 -> 属性 -> VC++目录 -> 库目录

 找到你mysql的安装目录,把MYSQL Server x.x 目录下的 lib 目录的路径添加进这个库目录里。

4、添加附加依赖项

项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项

直接把“libmysql.lib”这个文件名添加进附加依赖项里,不需要携带路径

5、复制 libmysql.lib 文件

在lib目录下找到 libmysql.lib 这个文件,就是上面第四点提到的只需要添加文件名的那个文件,我们将它复制。

粘贴到C盘下的Windows/System32目录下

 

C/C++操作mysql

1、获取数据库连接句柄

 初始化一个句柄,参数填NULL就行。

MYSQL* con = mysql_init(NULL);

2、连接到数据库 

第一个参数 mysql :句柄,传入步骤1得到的句柄就行。

第二个参数 host   :主机,本地的话填“127.0.0.1” 。

第三个参数 user   :mysql 用户名。

第四个参数 passwd:mysql 对应用户的密码。

第五个参数 db      :需要连接的数据库的库名。

第六个参数 port    :mysql 的端口号,默认都是3306。

第七个参数 unix——socket :unix连接方式。是否使用socket或管道机制,填入NULL不使用就行。

第八个参数 clientflag :运行ODBC数据库的标记,一般为0就行。

连接数据库,成功则返回句柄,失败则返回NULL,所以可以通过返回值来判断是否连接成功。

mysql_real_connect(con, host, user, password, database_name, port, NULL, 0)

 2.5设置编码格式

第一个参数 mysql     :把句柄传入就行。

第二个参数 csname  :编码格式名字,VS默认是GBK,所以我们这边也设置为“GBK” 

成功返回0,失败返回非0

mysql_set_character_set(con, "gbk");

 3、执行sql语句

第一个参数 mysql  :传入句柄。

第二个参数 q         : 执行sql的语句。

成功返回0,失败返回非0

mysql_query(con, "show tables;")

4、获取执行结果

两个函数都可以获取到句柄执行的结果集。

第一个会将指定表的数据全部都保存起来。

第二个相比较第一个函数,执行速度快,并且占用内存小,不过会阻止其他线程使用,也就是不能多线程。一般情况我们用第二个就行。

MYSQL_RES* res = mysql_use_result(con);

4.5 获取字段名

获取字段名,将步骤4的结果集传入即可。 

MYSQL_FIELD* fieldName = mysql_fetch_field(res);

 得到的MYSQL_FIELD* 可以直接当成数组使用,下面这样就可以获取到结果集的第一个字段名了,当数组使用时候再取一个name才能得到字段名。

fieldName[0].name

需要遍历获取字段名,我们就需要知道一共多少个字段名,然后遍历即可:

获取字段数量,传入结果集。

MYSQL_RES* res = mysql_use_result(con);
MYSQL_FIELD* fieldName = mysql_fetch_field(res);
for (unsigned int i = 0; i < mysql_num_fields(res); i++) {
	cout << fieldName[i].name << '\t';
}
cout << endl;

 5、将结果从结果集中取出

 把结果一行一行取出来,用MYSQL_ROW去接收,每次都会获取到下一行的结果,直到没有可以获取的结果,返回NULL。

使用起来也是和数组差不多。

因为要遍历,所以要获取每行结果的数量,和字段数是一样的,所以获取长度的函数就是上面那个。

MYSQL_ROW row;
while (row = mysql_fetch_row(res)) {	//按行读取结果集
	for (int i = 0; i < mysql_num_fields(res); i++) {	//将读取的行结果一个一个输出
		cout << row[i] << '\t';
	}
	cout << endl;
}

6、释放资源

释放结果集资源。

mysql_free_result(res);	//释放结果集资源

关闭数据库连接。

mysql_close(con);		//释放mysql连接资源

完整演示代码:

#include <iostream>
#include <mysql.h>
using namespace std;

const char* host = "127.0.0.1";
const char* user = "root";
const char* password = "123456";
const char* database_name = "test";
const int port = 3306;

int main(void) {
	//获取数据库连接句柄
	MYSQL* con = mysql_init(NULL);
	//设置连接选项
	//mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");
	//连接到数据库
	if (!mysql_real_connect(con, host, user, password, database_name, port, NULL, 0)) {
		perror("warming");
		return -1;
	}
	//设置GBK编码,以防乱码
	mysql_set_character_set(con, "gbk");
	//执行sql语句
	if (mysql_query(con, "select * from student")) {
		cout << "warming," << mysql_error(con) << endl;
	}
	//获取sql语句的执行结果
	MYSQL_RES* res = mysql_use_result(con);
	//获取结果的字段
	MYSQL_FIELD* fieldName = mysql_fetch_field(res);
	for (unsigned int i = 0; i < mysql_num_fields(res); i++) {
		cout << fieldName[i].name << '\t';
	}
	cout << endl;
	MYSQL_ROW row;
	while (row = mysql_fetch_row(res)) {	//按行读取结果集
		for (int i = 0; i < mysql_num_fields(res); i++) {	//将读取的行结果一个一个输出
			cout << row[i] << '\t';
		}
		cout << endl;
	}
	mysql_free_result(res);	//释放结果集资源
	mysql_close(con);		//释放mysql连接资源
	return 0;
}

  • 20
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值