C++完成使用map Update数据 二进制数据

1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码

cpp 复制代码
//获取更新数据的sql语句 where语句中用户要包含where 更新
	std::string GetUpdatesql(XDATA kv, std::string table, std::string where);
cpp 复制代码
std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std::string where)
	{
		string sql = "";
		if (kv.empty() || table.empty())
		{
			return "";
		}
		//update t_vedio set name= 'update001', size=1000 where id =10;
		sql = "update `";
		sql += table;
		sql += "` set ";
		for (auto ptr = kv.begin(); ptr != kv.end();ptr++)
		{
			sql += "`";
			sql += ptr->first;
			sql += "`=' ";
			sql += ptr->second.data;
			sql += "',";
		}
		//去除多余的逗号
		sql[sql.size() - 1] = ' ';
		sql += " ";
		sql += where;
		return sql;
	}

2、在LXMysql.h和LXMysql.cpp分别定义和编写UpdateBin 插入二进制数据

cpp 复制代码
    //返回更新数量,失败返回-1
    int UpdateBin(XDATA kv, std::string table, std::string where);
cpp 复制代码
int LXMysql::UpdateBin(XDATA kv, std::string table, std::string where)
	{
		if (!mysql || kv.empty() || table.empty())
		{
			return -1;
		}
		//update t_vedio set name= 'update001', size=1000 where id =10;
		string sql = "";
		sql = "update `";
		sql += table;
		sql += "` set ";
		MYSQL_BIND bind[256] = { 0 };
		int i = 0;
		for (auto ptr = kv.begin(); ptr != kv.end();ptr++)
		{
			sql += "`";
			sql += ptr->first;
			sql += "`=?,";
			bind[i].buffer = (char*)ptr->second.data;
			bind[i].buffer_length = ptr->second.size;
			//强转
			bind[i].buffer_type = (enum_field_types)ptr->second.type;
			i++;
			

		}
		//去除多余的逗号
		sql[sql.size() - 1] = ' ';
		sql += " ";
		sql += where;
		//预处理sql语句 上下文
		MYSQL_STMT* stmt = mysql_stmt_init(mysql);
		if (!stmt)
		{
			cerr << "mysql_stmt_init failed " << mysql_error(mysql) << endl;
			return -1;
		}
		if (mysql_stmt_prepare(stmt, sql.c_str(), sql.length()))
		{
			mysql_stmt_close(stmt);
			cerr << "mysql_stmt_prepare failed " << mysql_stmt_error(stmt) << endl;
			return -1;
		}
		//绑定
		if (mysql_stmt_bind_param(stmt, bind) != 0)
		{
			mysql_stmt_close(stmt);
			cerr << "mysql_stmt_bind_param failed " << mysql_stmt_error(stmt) << endl;
			return false;
		}
		//执行
		if (mysql_stmt_execute(stmt) != 0)
		{
			mysql_stmt_close(stmt);
			cerr << "mysql_stmt_execute failed " << mysql_stmt_error(stmt) << endl;
			return -1;
		}
		mysql_stmt_close(stmt);

		return mysql_stmt_affected_rows(stmt);
	}

3、测试

cpp 复制代码
    //更新二进制数据
    //修改id=3的图片
    XDATA udata2;
    LXData file2;
    file2.LoadFile("F:/Documents/Desktop/c++/数据库plus/src/bin/test2.jpg");
    udata2["data"] = file2;
    cout << " my.UpdateBin=" << my.UpdateBin(udata2, "t_vedio", "where id=3") << endl;
    file2.Drop();
相关推荐
其实防守也摸鱼5 小时前
CTF Web 6 题全解 Writeup
linux·sql·学习·算法·安全·ctf·xss
宇明一不急5 小时前
string和byte的相互转换
算法
小小龙学IT5 小时前
PostgreSQL 服务端机制与 SQL 实战深度解析:从 MVCC 到查询优化器
数据库·sql·postgresql
l1t5 小时前
DeepSeek总结的DuckDB 从 JSON 字符串到类型化列
数据库·sql·json
codeejun5 小时前
每日一Go·MySQL-7、MySQL 核心原理全景图谱
开发语言·mysql·golang
Raas1005 小时前
AI网关能做调用审计吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·服务器·网络·数据库·gateway·prompt·企业级产品
波力海苔夹心脆6755 小时前
VisionPro 与 VisionMaster 对比(上):软件定位、开发环境与核心视觉工具对照
图像处理·算法·计算机视觉·c#·视觉检测·个人开发·vp9
动词ing6 小时前
【题目练习】盛最多水的容器
算法·目标检测
海绵宝宝转agent6 小时前
2026-10-14算法+面经总结
java·笔记·算法·缓存
虚无的纽扣6 小时前
【力扣刷题】第四天:三数之和、四数之和
算法·leetcode·职场和发展