C++使用map插入insert数据(二进制数据和非二进制数据)接口封装+读取文件

1、定义编写代码

    //生成insert sql语句std::string GetInsertsql(XDATA kv, std::string table);//插入非二进制数据bool Insert(XDATA kv, std::string table);//插入二进制数据bool InsertBin(XDATA kv, std::string table);
std::string LXMysql::GetInsertsql(XDATA kv, std::string table){string sql = "";if (kv.empty() || table.empty()){return "";}else{sql = "insert into `";sql += table;sql += "` ";//insert into t_vedio (name,size) values ("name1","1024");string keys = "";string values = "";//用迭代mapfor (auto ptr = kv.begin();ptr != kv.end();ptr++){keys += "`";keys += ptr->first;keys += "`,";values += "'";values += ptr->second.data;values += "',";}//去除结尾多余逗号keys[keys.size() - 1] = ' ';values[values.size() - 1] = ' ';sql += "(";sql += keys;sql += ")values(";sql += values;sql += ")";return sql;}		}bool LXMysql::Insert(XDATA kv, std::string table){if (!mysql)//如果mysql没有初始化好{cerr << "Insert failed: mysql is NULL" << endl;return false;}string sql= GetInsertsql(kv, table);if (sql.empty()){return false;}if (!Query(sql.c_str())){return false;}int num = mysql_affected_rows(mysql);if (num <= 0){return false;}else{			return true;}		}bool LXMysql::InsertBin(XDATA kv, std::string table){if (!mysql){return false;}string sql = "";if (kv.empty() || table.empty()){return false;}else{sql = "insert into `";sql += table;sql += "` ";//insert into t_vedio (name,size) values (?,?);string keys = "";string values = "";//绑定MYSQL_BIND bind[256] = { 0 };int i = 0;//用迭代mapfor (auto ptr = kv.begin();ptr != kv.end();ptr++){if (ptr->second.data==nullptr){cout << "chdswvf" << endl;}keys += "`";keys += ptr->first;keys += "`,";values += "?,";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++;}//去除结尾多余逗号keys[keys.size() - 1] = ' ';values[values.size() - 1] = ' ';sql += "(";sql += keys;sql += ") values(";sql += values;sql += ")";//预处理sql语句MYSQL_STMT* stmt = mysql_stmt_init(mysql);if (!stmt){cerr << "mysql_stmt_init failed " << mysql_error(mysql) << endl;return false;}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 false;}//绑定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 false;}mysql_stmt_close(stmt);return true;		}}
bool LXData::LoadFile(const char* filename){//先读到本地if (filename == NULL){return false;}else{fstream in(filename, ios::in | ios::binary);if (!in.is_open()){cerr << "LoadFile " << filename << "failed! " << endl;return false;}else{//文件大小in.seekg(0, ios::end);size = in.tellg();in.seekg(0, ios::beg);if (size <= 0){return false;}else{data = new char[size];//记得释放//读数据int readed = 0;while (!in.eof()){in.read((char*)data + readed, size - readed);//表及读到那里了if (in.gcount() > 0){readed = in.gcount();}else{break;}}in.close();this->type = LX_TYPE_BLOB;return true;}				}}}bool LXData::SaveFile(const char* filename){if (!data || size <= 0){return false;}fstream out(filename, ios::out | ios::binary);if (!out.is_open()){cerr << "SaveFile failed! open  " << filename << "failed!" << endl;return false;}out.write(data, size);out.close();return true;}void LXData::Drop(){delete data;data = NULL;}

3、测试

//插入数据XDATA data1;  //data1.insert(make_pair("name", LXData("insertname001")));data1["name"]="insertname001";data1["size"] = "1024";//cout << my.GetInsertsql(data1, "t_vedio") << endl;my.Insert(data1, "t_vedio");data1["name"] = "insertname002";data1["size"] = "1024";my.Insert(data1, "t_vedio");//读取图片data1["name"] = "mysql_new.jpg";LXData file1;file1.LoadFile("F:/Documents/Desktop/c++/数据库plus/src/bin/mysql.jpg");data1["data"] = file1;data1["size"] = &file1.size;//正式插入数据my.InsertBin(data1, "t_vedio");

这篇代码比较复杂,我将可执行文件放在网盘,大家自行下载,最终输出如下,才算成功

链接:http://链接:https://pan.baidu.com/s/1ASdW9Hdv5q2X-ZK90YdDeQ?pwd=lldd 提取码:lldd


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/340819.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

x-cmd pkg | dua - 磁盘使用分析器

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 dua 是 Disk Usage Analyzer 的简写&#xff0c;该工具可以快速查看给定目录的磁盘空间使用情况。 对于想要深入了解磁盘空间使用情况并有效管理存储的用户来说&#xff0c;Dua 是一个很有价值的工具。通过使用 Dua …

华为“纯血”鸿蒙加速进场 高校、企业瞄准生态开发新风口

近日&#xff0c;华为终端BG CEO、智能汽车解决方案BU董事长余承东在2024年新年信中提出&#xff0c;开启华为终端未来大发展的新十年。 他特别提到&#xff0c;未来要构建强大的鸿蒙生态&#xff0c;2024年是原生鸿蒙的关键一年&#xff0c;将加快推进各类鸿蒙原生应用的开发…

指导AI进行推理:提示工程如何弥补RAG系统中的差距

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research) 原文标题:Instructing AI to Reason: How Prompt Engineering Bridges the Gap in RAG Systems 原文地址:https://medium.c…

el-select 单选时,选择后输入框的is-focus状态并没有取消

前两天在封装组件的时候&#xff0c;发现el-select 单选时&#xff0c;选择后输入框的is-focus状态并没有取消&#xff0c;需要手动点其它地方才会取消&#xff0c;于是想着找找为什么 一、通过调试源码发现&#xff0c;输入框在点击选项后触发blur&#xff0c;紧接着又触发了…

使用MySQL的过程中,有没有遇到过count()比较慢的情况?

count(*)的实现方式 MyISAM引擎把一个表的总行数存在了磁盘上&#xff0c;执行count(*)的时候直接返回这个数&#xff0c;效率很高&#xff1b; InnoDB引擎执行count(*)的时候&#xff0c;需要把数据一行一行地从引擎里面读出来&#xff0c;然后累积计数。 上述说明是在没有…

AOP切面逻辑实现后,原有正常业务代码失效?

问题代码展示 OverrideAround("annotation(sessionChange)")public void aroundSessionChange(SessionChange sessionChange) {SessionChangeAspect.super.aroundSessionChange(sessionChange);}/*** 模拟登录* return*/GetMapping("/logon")SessionChange…

【AI视野·今日CV 计算机视觉论文速览 第286期】Tue, 9 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Tue, 9 Jan 2024 Totally 121 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Dr$^2$Net: Dynamic Reversible Dual-Residual Networks for Memory-Efficient Finetuning Authors Chen Zhao, Shuming Li…

SemiDrive E3 打包说明

一、 概述 本文介绍 E3 PAC 打包&#xff0c;编译器生成 bin 文件需要通过打包生成 PAC 包&#xff0c;再通过 SDToolBox 工具将 PAC 包烧写到芯片&#xff0c;PAC 包的物理载体分为 Flash、eMMC、SD&#xff0c;一个 PAC包最多支持 3 个BootPackage&#xff1b;本文主要描述打…

基于知识图谱的健康知识问答系统

基于知识图谱的健康知识问答系统 引言数据集与技术选型数据集技术选型 系统功能与实现数据导入与图数据库构建问答任务设计与实现1. 实体提取2. 用户意图识别 前端聊天界面与问答系统 结语 引言 随着互联网的发展&#xff0c;人们对健康知识的需求逐渐增加。为了更方便地获取健…

每天刷两道题——第十二天+第十三天

1.1合并区间 以数组 i n t e r v a l s intervals intervals 表示若干个区间的集合&#xff0c;其中单个区间为 i n t e r v a l s [ i ] [ s t a r t i , e n d i ] intervals[i] [starti, endi] intervals[i][starti,endi] 。请你合并所有重叠的区间&#xff0c;并返回 …

基于ssm智慧社区停车管理系统设计与实现【附源码】

基于ssm智慧社区停车管理系统设计与实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&am…

计算机速成课Crash Course - 18. 操作系统

今天继续计算机速成课Crash Course的系列讲解。 更多技术文章&#xff0c;全网首发公众号 “摸鱼IT” 锁定 -上午11点 - &#xff0c;感谢大家关注、转发、点赞&#xff01; 计算机速成课Crash Course - 17. 集成电路&摩尔定律 18. 操作系统 1940,1950 年代的电脑&#…