C++ 读取mysql数据库示例

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
使用C++ 读取mysql数据库的一般执行过程和预备执行过程简单示例。本次示例中引用的是mysql的64位的数据库;其中依赖的文件可以在我的下载内容中找到
依赖文件链接地址:https://download.csdn.net/download/me_test/86506310


示例

普通语句执行

#include "mysql.h"
#pragma comment(lib,"libmysql.lib")

MYSQL mysql_connect;//数据库连接符
mysql_init(&mysql_connect);
if(!mysql_real_connect(&mysql_connect,"127.0.0.1","test","test","test_db",3306, NULL, 0))
	const char* s_error = mysql_error(&mysql_connect);
	
//插入语句(删除、更新语句执行方式类似)
const char* insert_sql = "insert test_table(f_id,f_name)values(1,"test");
if (mysql_query(&mysql_connect,insert_sql ))
	const char* s_error = mysql_error(&mysql_connect);

//查询语句
MYSQL_ROW mysql_row;//数据库每行结果
MYSQL_RES* mysql_result = NULL;
const char* select_sql = "select f_id from test_tale";
if (!mysql_query(&mysql_connect,sql))
{
	mysql_result = mysql_store_result(&mysql_connect);
	if (mysql_result)
	{
		while((mysql_row = mysql_fetch_row(mysql_result))
		{
			printf("%d\n",atoi(mysql_row[0]));
		}
	}
	mysql_free_result(mysql_result);
}
else{
	const char* s_error = mysql_error(&mysql_connect);
}

prepare语句执行

如果插入的语句中并不是简单的int或者string类型;而是比较长的字符串或者blob类型。那么就需要使用prepare语句插入blob。
使用这种方式需要注意:由于此方式里面绑定数据使用的都是指针,并没有进行深拷贝,绑定的数据必须要保证在语句执行完毕之前有效。否则的话数据一旦离开有效区间就会被释放,导致执行错误。

#include "mysql.h"
#pragma comment(lib,"libmysql.lib")

MYSQL mysql_connect;//数据库连接符
mysql_init(&mysql_connect);
if(!mysql_real_connect(&mysql_connect,"127.0.0.1","test","test","test_db",3306, NULL, 0))
	const char* s_error = mysql_error(&mysql_connect);
	
MYSQL_STMT* stmt = nullptr;
stmt = mysql_stmt_init(&database::getSingletonPtr()->get_connection());
if(!stmt)const char* s_error = mysql_error(&mysql_connect);

MYSQL_BIND bind[3];
memset(bind,0,sizeof(bind));
//准备插入的语句
const char* insert_sql = "insert into test_tb2(f_id,f_name,f_data)values(?,?,?)";
//插入int类型数据准备
int n_id = 100;
bind[0].buffer_type = MYSQL_TYPE_LONG;
bind[0].buffer = (char*)&n_id ;
bind[0].is_null = 0;
bind[0].length = 0;
//插入string类型准备
char* str_data = "test data";
unsigned int u_length = strlen(str_data);
bind[1].buffer_type = MYSQL_TYPE_STRING;
bind[1].buffer = (char*)str_data;
bind[1].is_null = 0;
bind[1].length = &s_length;
//插入blob类型
std::vector<int> vec_value;
for(auto i = 0; i < 1000; i++)
	vec_value.push_back(i);
unsigned int b_length = vec_value.size()*sizeof(int);
bind[2].buffer_type = MYSQL_TYPE_BLOB;
bind[2].buffer = (char*)&vec_value[0];
bind[2].is_null = 0;
bind[2].length = &b_length;

//准备语句
if (mysql_stmt_prepare(stmt, insert_sql , strlen(insert_sql))
{
	const char* s_error = mysql_stmt_error(stmt);
	printf("marker error : %s\n", s_error);
	return;
}
//绑定数据
if (mysql_stmt_bind_param(stmt, bind)) {
	const char* s_error = mysql_stmt_error(stmt);
	printf("marker error : %s\n", s_error);
	return;
}
//执行语句
if (mysql_stmt_execute(stmt)) {
	const char* s_error = mysql_stmt_error(stmt);
	printf("marker error : %s\n", s_error);
	return;
}
//关闭状态
if (mysql_stmt_close(stmt))
{
	const char* s_error = mysql_stmt_error(stmt);
	printf("marker error : %s\n", s_error);
	return;
}

总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值