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();
相关推荐
唐诺几秒前
几种广泛使用的 C++ 编译器
c++·编译器
工业甲酰苯胺5 分钟前
分布式系统架构:服务容错
数据库·架构
XH华9 分钟前
初识C语言之二维数组(下)
c语言·算法
南宫生30 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_42 分钟前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
落魄君子1 小时前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
冷眼看人间恩怨1 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
菜鸡中的奋斗鸡→挣扎鸡1 小时前
滑动窗口 + 算法复习
数据结构·算法
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
红龙创客1 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++