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();
相关推荐
小糖学代码1 小时前
Linux:11.线程概念与控制
linux·服务器·c语言·开发语言·c++
科研小白_2 小时前
基于遗传算法优化BP神经网络(GA-BP)的数据时序预测
人工智能·算法·回归
兮兮能吃能睡2 小时前
SQL中常见的英文术语及其含义
数据库·sql·oracle
Terry Cao 漕河泾2 小时前
基于dtw算法的动作、动态识别
算法
Elastic 中国社区官方博客3 小时前
根据用户行为数据中的判断列表在 Elasticsearch 中训练 LTR 模型
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Larry_Yanan4 小时前
QML学习笔记(四十)QML的ApplicationWindow和StackView
c++·笔记·qt·学习·ui
王道长服务器 | 亚马逊云4 小时前
AWS CloudWatch:服务器的“眼睛”,实时监控一切动向
服务器·数据库·aws
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 73: 最小路径和、地下城游戏
数据结构·算法·leetcode·职场和发展·深度优先·动态规划·推荐算法
野蛮人6号5 小时前
力扣热题100道之560和位K的子数组
数据结构·算法·leetcode
Swift社区6 小时前
LeetCode 400 - 第 N 位数字
算法·leetcode·职场和发展