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();
相关推荐
名字还没想好☜14 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
.道阻且长.14 小时前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展
ltl14 小时前
Serverless 数据库弹性理论:Neon 与 Aurora Serverless v2
数据库
·薯条大王15 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
Dxy123931021616 小时前
Python 如何使用 MySQL 的事务
python·mysql
To_OC16 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
Forever Nore19 小时前
学完C语言力扣第一题做不来正常吗
数据结构·算法
marvelyu19 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
hansang_IR19 小时前
【题解】LC:倍增 / 区间并查集(Range Parallel Unionfind)
c++·算法·并查集