springboot生成表结构和表数据sql
需求
业务背景是需要某单机程序需要把正在进行的任务导出,然后另一台电脑上单机继续运行,我这里选择的方案是同步SQL形式,并保证ID随机,多个数据库不会重复。
实现
package com.nari.web.controller.demo.controller;import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/download")
public class DemoController {@Resourceprivate JdbcTemplate jdbcTemplate;/*** 二进制转成十六进制* 这里主要是处理图片数据,因为数据库存了图片Base64*/private String bytesToHexString(byte[] bytes) {StringBuilder hexString = new StringBuilder();for (byte b : bytes) {String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex);}return hexString.toString();}/*** 导出指定表SQL**/@GetMapping("/table/{tableName}")public void downloadTable(@PathVariable String tableName, HttpServletResponse response) throws IOException {// 查询表数据List<Map<String, Object>> tableData = jdbcTemplate.queryForList("SELECT * FROM " + tableName);// 查询表结构List<Map<String, Object>> tableStructure = jdbcTemplate.queryForList("SHOW CREATE TABLE " + tableName);// 拼接SQL插入语句StringBuilder sqlBuilder = new StringBuilder();sqlBuilder.append(tableStructure.get(0).get("Create Table")).append(";\n\n");for (Map<String, Object> row : tableData) {StringBuilder valuesBuilder = new StringBuilder();StringBuilder columnsBuilder = new StringBuilder();for (Map.Entry<String, Object> entry : row.entrySet()) {columnsBuilder.append(entry.getKey()).append(", ");if (entry.getValue() instanceof byte[]) {byte[] binaryData = (byte[]) entry.getValue();String hexString = bytesToHexString(binaryData);valuesBuilder.append("0x").append(hexString).append(", ");} else {valuesBuilder.append("'").append(entry.getValue()).append("', ");}}String columns = columnsBuilder.substring(0, columnsBuilder.length() - 2);String values = valuesBuilder.substring(0, valuesBuilder.length() - 2);sqlBuilder.append("INSERT INTO ").append(tableName).append(" (").append(columns).append(") VALUES (").append(values).append(");\n");}// 构建响应response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + tableName+".sql");response.getWriter().write(sqlBuilder.toString());}}
结果
能看到这边图片已经正常导出了
相关文章:
![](https://img-blog.csdnimg.cn/9114a9a9192b464ab6f569a17a0e0060.png)
springboot生成表结构和表数据sql
需求 业务背景是需要某单机程序需要把正在进行的任务导出,然后另一台电脑上单机继续运行,我这里选择的方案是同步SQL形式,并保证ID随机,多个数据库不会重复。 实现 package com.nari.web.controller.demo.controller;import cn…...
![](https://img-blog.csdnimg.cn/img_convert/38550f29443b33c6599d8e6838c7225a.png)
代码随想录—力扣算法题:209长度最小的子数组.Java版(示例代码与导图详解)
版本说明 当前版本号[20230808]。 版本修改说明20230808初版 目录 文章目录 版本说明目录209.长度最小的子数组思路暴力解法滑动窗口 两种方法的区别总结 209.长度最小的子数组 力扣题目链接 更多内容可点击此处跳转到代码随想录,看原版文件 给定一个含有 n 个…...
![](https://www.ngui.cc/images/no-images.jpg)
81 | Python可视化篇 —— Seaborn数据可视化
Seaborn是Python中一个基于Matplotlib的高级数据可视化库,它提供了更简单的API和更美观的图形样式,适用于数据探索和展示。在本教程中,我们将介绍Seaborn的基本概念和用法,并通过一些示例演示如何使用Seaborn来创建各种图表和图形。 文章目录 1. 导入Seaborn库和数据2. 数据…...
![](https://img-blog.csdnimg.cn/3bffb5c90e0f45d5b9e0bc8f9578814b.png)
解决Error running XXXApplicationCommand line is too long.报错
测试IDEA版本:2019.2.4 ,2020.1.3 文章目录 一. 问题场景二. 报错原因2.1 为什么命令行过长会导致这种问题? 三. 解决方案3.1 方案一3.2 方案二 一. 问题场景 当我们从GitHub或公司自己搭建的git仓库上拉取项目代码时,会出现以下错误 报错代…...
![](https://img-blog.csdnimg.cn/e2abb68a405c4900890ce7ad27f92e61.gif)
【Linux】—— 进程等待 waitwaitpid
序言: 之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。因此,为了解决这个问题,就需要用到有关 “进程等待” 的基本知识!!&am…...
![](https://www.ngui.cc/images/no-images.jpg)
el-tree 懒加载数据,增删改时局部刷新实现
1.数据过多时进行懒加载孩子节点,根据层级传参获取后端孩子数据 懒加载主要部分: 1参数: :load"loadNode" lazy :props"defaultProps" 2.defaultProps 需要设置isLeaf: isLeaf,去除最后一层孩子节点的展开图表 defaultProps: { ch…...
![](https://img-blog.csdnimg.cn/91dc6099b7ea4d00a30d747b3b68f4f4.png)
opencv基础44- Canny边缘检测详解-cv.Canny()
什么是Canny边缘检测? Canny边缘检测是一种经典的边缘检测算法,由John F. Canny在1986年提出。它被广泛应用于计算机视觉和图像处理领域,是一种多阶段的边缘检测算法,能够有效地检测图像中的边缘并抑制噪声。 Canny边缘检测的主要…...
![](https://www.ngui.cc/images/no-images.jpg)
neo4j查询语言Cypher详解(三)--函数
函数 Cypher中的函数如果输入参数为null,则返回null。 以字符串作为输入的函数都对Unicode字符进行操作,而不是对标准字符进行操作。例如,size()函数应用于任何Unicode字符将返回1,即使该字符不适合一个字符的16位。 可以通过 …...
![](https://img-blog.csdnimg.cn/a93db62b11714cc080269e30acf77ca2.jpeg#pic_center)
kafka权威指南(阅读摘录)
零复制 Kafka 使用零复制技术向客户端发送消息——也就是说,Kafka 直接把消息从文件(或者更确切地说是 Linux 文件系统缓存)里发送到网络通道,而不需要经过任何中间缓冲区。这是 Kafka 与其他大部分数据库系统不一样的地方&#…...
![](https://img-blog.csdnimg.cn/img_convert/333830dc257ed5dd5dfebebbc19d7f06.png)
【爬虫实践】使用Python从网站抓取数据
一、说明 本周我不得不为客户抓取一个网站。我意识到我做得如此自然和迅速,分享它会很有用,这样你也可以掌握这门艺术。【免责声明:本文展示了我的抓取做法,如果您有更多相关做法请在评论中分享】 二、计划策略 2.1 策划 确定您…...
![](https://img-blog.csdnimg.cn/66c3f84010f24e1d8382bebf16b0cc8e.png)
win10 2022unity设置中文
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言解决方法 前言 在Edit->preferences里找不到language选项。 解决方法 【1】打开下面地址 注意 :把{version}换成你当前安装的版本,比如说如果…...
![](https://img-blog.csdnimg.cn/img_convert/0fe24b7aa520bdaa8d0d580894553454.png)
python表白代码大全可复制,python表白代码大全简单
大家好,小编来为大家解答以下问题,python表白代码大全可复制,python表白程序代码完整版,现在让我们一起来看看吧! 今天是20230520,有人说:5代表的是人生五味,酸甜苦辣咸;…...
![](https://img-blog.csdnimg.cn/4fd7ccd054f64bbdafea35970da66b44.png)
wordpress 打开缓慢处理
gravatar.com 头像网站被墙 追踪发现请求头像时长为21秒 解决方案一 不推荐,容易失效,网址要是要稳定为主,宁愿头像显示异常,也不能网址打不开 网上大部分搜索到的替换的CDN网址都过期了,例如:gravatar.du…...
![](https://img-blog.csdnimg.cn/849e5340b4e3434a93e0946fe6276476.png)
Adobe ColdFusion 反序列化漏洞复现(CVE-2023-29300)
0x01 产品简介 Adobe ColdFusion是美国奥多比(Adobe)公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion存在代码问题漏洞,该漏洞源于受到不受信任数据反序列化漏洞的影响,攻击…...
![](https://img-blog.csdnimg.cn/371bd8ba99744572b7c0eff19a626e73.png)
林【2018】
关键字: BST插入叶子结点、ADT结伴操作、队列插入前r-1、哈希函数二次探测法(1,-1,4,-4)、队列元素个数、折半查找失败次数、广义表链表结构、B-树构建、单链表指定位置插入数组元素 一、判断 二、单选 h(49)+1,-1,+4,-4...
![](https://img-blog.csdnimg.cn/9a481f1af1474d92846cff35f8ac3ac8.png)
ffmpeg+nginx实现rtsp协议摄像头web端播放
ffmpegnginx实现rtsp协议摄像头web端播放 环境准备准备nginx环境添加rtmp模块添加hls转发 使用ffmpeg,将摄像头rtsp转为rtmp并推送到nginxVLC播放验证 环境准备 nginx(需要安装rtmp模块)ffmpeg 6.0vlc播放器(本地播放验证&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
【周赛第69期】满分题解 软件工程选择题 枚举 dfs
目录 选择题1.2.3.4.面向对象设计七大原则 编程题S数最小H值 昨晚没睡好,脑子不清醒,痛失第1名 选择题 1. 关于工程效能,以下哪个选项可以帮助提高团队的开发效率? A、频繁地进行代码审查 B、使用自动化测试工具 C、使用版本控…...
![](https://www.ngui.cc/images/no-images.jpg)
P2015 二叉苹果树
P2015 二叉苹果树 类似于带限制背包问题,但不知道也能做。 n , q n,q n,q 范围小,大胆设 dp 状态。设 f u , i \large f_{u,i} fu,i 表示 u u u 子树内保留 i i i 根树枝的最大苹果数,可得状态转移方程 f u , i f u , j f v , i − …...
![](https://www.ngui.cc/images/no-images.jpg)
Linux 内核音频数据传递主要流程
Linux 用户空间应用程序通过声卡驱动程序(一般牵涉到多个设备驱动程序)和 Linux 内核 ALSA 框架导出的 PCM 设备文件,如 /dev/snd/pcmC0D0c 和 /dev/snd/pcmC0D0p 等,与 Linux 内核音频设备驱动程序和音频硬件进行数据传递。PCM 设…...
![](https://www.ngui.cc/images/no-images.jpg)
torch.device函数
torch.device 是 PyTorch 中用于表示计算设备(如CPU或GPU)的类。它允许你在代码中指定你希望在哪个设备上执行张量和模型操作,本文主要介绍了 torch.device 函数的用法和功能。 本文主要包含以下内容: 1.创建设备对象2.将张量和模…...
![](https://img-blog.csdnimg.cn/img_convert/15bd2f6901978390882403a475d43d63.jpeg)
火车头采集器AI伪原创【php源码】
大家好,本文将围绕python作业提交什么文件展开说明,python123怎么提交作业是一个很多人都想弄明白的事情,想搞清楚python期末作业程序需要先了解以下几个事情。 火车头采集ai伪原创插件截图: I have a python project, whose fold…...
![](https://www.ngui.cc/images/no-images.jpg)
Python中常见的6种数据类型
数字(Numbers):数字类型用于表示数值,包括整数(int)和浮点数(float)。 字符串(Strings):字符串类型用于表示文本,由一系列字符组成。字…...
![](https://img-blog.csdnimg.cn/5f88574f663d45e7b7ed8c53c6b2ab3c.png)
消息队列项目(2)
我们使用 SQLite 来进行对 Exchange, Queue, Binding 的硬盘保存 对 Message 就保存在硬盘的文本中 SQLite 封装 这里是在 application.yaml 中来引进对 SQLite 的封装 spring:datasource:url: jdbc:sqlite:./data/meta.dbusername:password:driver-class-name: org.sqlite.…...
![](https://img-blog.csdnimg.cn/c027e1c4d0a6460383b36563b45c5f8b.png)
解决MAC M1处理器运行Android protoc时出现的错误
Protobuf是Google开发的一种新的结构化数据存储格式,一般用于结构化数据的序列化,也就是我们常说的数据序列化。这个序列化协议非常轻量级和高效,并且是跨平台的。目前,它支持多种主流语言,比传统的XML、JSON等方法更具…...
![](https://www.ngui.cc/images/no-images.jpg)
C#使用SnsSharp实现鼠标键盘钩子,实现全局按键响应
gitee下载地址:https://gitee.com/linsns/snssharp 一、键盘事件,使用SnsKeyboardHook 按键事件共有3个: KeyDown(按键按下) KeyUp(按键松开) KeyPress(按键按下并松开) 以KeyDown事件为例,使用代码如下&…...
![](https://img-blog.csdnimg.cn/8530de22c0f14dc28c41fc620fe51d19.png)
Zookeeper基础操作
搭建Zookeeper服务器 windows下部署 下载地址: https://mirrors.cloud.tencent.com/apache/zookeeper/zookeeper-3.7.1/ 修改配置文件 打开conf目录,将 zoo_sample.cfg复制一份,命名为 zoo.cfg打开 zoo.cfg,修改 dataDir路径,…...
![](https://img-blog.csdnimg.cn/aef53c9eb54e4b40bb6fb14a1aba23c2.png)
【CSS】说说响应式布局
目录 一、是什么 二、怎么实现 1、媒体查询 2、百分比 3、vw/vh 4、小结 三、总结 一、是什么 响应式设计简而言之,就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。 响应式网站常见特点: 同时适配PC 平板 手机等…...
数据结构 | 利用二叉堆实现优先级队列
目录 一、二叉堆的操作 二、二叉堆的实现 2.1 结构属性 2.2 堆的有序性 2.3 堆操作 队列有一个重要的变体,叫作优先级队列。和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
Javascript怎样阻止事件传播?
在 JavaScript 中,可以使用事件对象的方法来阻止事件传播。事件传播指的是当一个元素上触发了一个事件,该事件会在事件流中传播到父元素或祖先元素,从而影响到它们。 事件传播有三个阶段:捕获阶段、目标阶段和冒泡阶段。阻止事件…...
![](https://img-blog.csdnimg.cn/2c3b420acb1444b29765130f0b10bc4b.png)
web-csrf
目录 CSRF与XSS的区别: get请求 原理: pikachu为例 post请求 pikachu为例 CSRF与XSS的区别: CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限 get请求 原理:…...
![](/images/no-images.jpg)
中国体育直播在线观看斯诺克赛/西安seo网站关键词
AngularJS 1.2版本中提供了Controller As语法,简单说就是可以在Controller中使用this来替代$scope,使得Controller更像一个传统的JS类,相对于$scope的继承树要理解上要简单一些。 基础用法 传统的Controller是这样写的: app.contr…...
如何利用视频网站做数字营销推广/百度知道官网首页登录入口
世界上最安全的地方是哪?大部分人的答案是家。而守护家的安全就绝对离不开一扇坚固的防盗门。现在市场上防盗门品牌繁杂,质量参差不齐,都说自己是最好的,最安全的,但其实内里却是别有乾坤。日上防盗门质检工程师告诉我…...
![](https://img-blog.csdnimg.cn/img_convert/539a7f06e825e4554883e010b0c313f7.png)
wordpress 农场模板/搜索引擎竞价推广的优势
网络作文教学设计作为一无名无私奉献的教育工作者,编写教学设计是必不可少的,教学设计一般包括教学目标、教学重难点、教学方法、教学步骤与时间分配等环节。优秀的教学设计都具备一些什么特点呢?下面是小编收集整理的网络作文教学设计&#…...
wordpress的qq邮件列表qq邮件列表订阅rss源地址怎么找/企业网络营销方案策划
快速开发平台,简单地说就是指那些不用编码或通过少量代码,就可以快速开发应用程序的平台。既可以降低开发人力成本,又可以缩短开发时间,从而实现企业降本增效的价值。应用快速开发(rapid application development, RAD…...
![](/images/no-images.jpg)
电商网站制作/百度指数大数据
没有顺序关系,可前可后。...
![](/images/no-images.jpg)
网站根目录是哪个文件夹/网页设计制作教程
世界上最成功的人一开始是个程序员。在1974年,Bill Gates为Altair 8800写了一个4K的编译器,今天,他创立的Microsoft用Windows操作系统和Microsoft Office, Microsoft Home等产品统治了PC软件市场。Bill成了世界首富,他的个人财产今…...