环境:

springboot+mybatis

需求:

前台导入任意数据,后台经过处理后,根据处理后的字段,新建数据库表,并入库处理后的数据。

1.Mapper.xml中创建通用sql脚本,如下:

  <select id="executeSql" parameterType="String">${sqlContent}</select>

2.创建表格,因为表明和字段名,字段数量未知,需要用StringBuffer讲sql拼接

StringBuffer sbInsert=new StringBuffer();tId= "re_"+ UUIDUtils.uuid();sbInsert.append("CREATE TABLE ").append(tId) .append("(");// 遍历map中的key,来构造数据库字段for(int tabIndex=0;tabIndex<tableTitle.size();tabIndex++){sbInsert.append(" ").append(tableTitle.get(tabIndex)).append(" varchar(255) DEFAULT NULL");if(tabIndex!=tableTitle.size()-1){sbInsert.append(",");}}sbInsert.append(")").append(";");//执行通用sql语句mapper.executeSql(sbInsert.toString());

3.开始拼接并执行insert语句

其实就是拼接出如下sql语句:

insert into re_5f7ba278190d4b46b4b3505495050541-->动态生成的表名
(amount,province_id,oder_time,order_id,order_name,province_name) -->动态生成的列名
VALUES
('308','340000','2018/10/1','DHDB190601022','奇瑞控股-系统','安徽省'),
('307','340000','2018/12/1','DHDB190601022','奇瑞控股-系统','安徽省'),
('69','340000','2019/3/1','DHDB190601022','奇瑞控股-系统','安徽省'),
('484','340000','2019/6/1','DHDB190601022','奇瑞控股-系统','安徽省'),
('370','340000','2018/8/1','DHDB180601009','奇瑞控股-咨询','安徽省'),
('464','340000','2020/8/1','DHDB200801098','奇瑞系统项目三期','安徽省'),
('447','120000','2021/1/1','DHBB210101037','一汽丰田系统项目','天津市'),
('37','120000','2020/3/1','DHBB200301032','中汽中心电子影像项目','天津市')

拼接代码如下:

 StringBuffer sbInsert=new StringBuffer();sbInsert.append("insert into ").append(tId).append("(")//将动态生成的列名字段之间使用","隔开.append(String.join(",",tableTitle)).append(") VALUES ");//遍历数据,根据表头取出数据,拼接数据for(int countIndex=0;countIndex<list.size();countIndex++){sbInsert.append("(");Map<String, Object> stringObjectMap = list.get(countIndex);for(int titleNUm=0;titleNUm<tableTitle.size();titleNUm++){if(titleNUm!=0){sbInsert.append(",");}sbInsert.append("'").append(stringObjectMap.get(tableTitle.get(titleNUm))).append("'");}sbInsert.append(")");if(countIndex!=list.size()-1){sbInsert.append(",");}}//将sql传入公共sql处理模块,执行insert语句mapper.executeSql(sbInsert.toString());

如下操作后,数据库表和表数据都可以在程序中动态生成,如下图:

题外:

postgrepsql 主键冲突则updata其他字段,主键不冲突则执行insert

INSERT INTO res_tname_tid_relatioin_t(tab_name,tab_id)
VALUES('zhangsan','112222')
ON conflict(tab_id)
DO UPDATE SET tab_name = 'true_tname'

动态创建表,并批量入库表数据(字段在程序运行之前未知)相关推荐

  1. linux直接运行程序加载动态库失败,扣丁学堂Linux培训详解程序运行时加载动态库失败解决方法...

    今天扣丁学堂Linux培训老师给大家介绍一下关于Linux程序运行时加载动态库失败的解决方法,希望对同学们学习有所帮助,下面我们一起来看一下吧. Linux下不能加载动态库问题 当出现下边异常情况 . ...

  2. VS2008工具,两种加入库的方法。 设置程序运行时目录

    方法一:整个编译器加入库 tools->Projects and Solutions->VC++ Directories->右上角选择Library files 加入D:\work\ ...

  3. mysql循环建表_mysql创建存储过程,批量建表分表00到99

    --创建存储过程 DELIMITER $$ CREATE PROCEDURE `createTablesWithIndex`() BEGIN DECLARE `@i` INT(11); DECLARE ...

  4. 使用python套用excel模板_Python自动化办公Excel-从表中批量复制粘贴数据到新表

    1.模块安装 1)cmd模式下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd pip install -i https:/ ...

  5. python复制excel到另一个excel_Python自动化办公Excel-从表中批量复制粘贴数据到新表...

    1.模块安装 1)cmd模式下: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd pip install -i https:/ ...

  6. 批量导入数据到hive表中:假设我有60张主子表如何批量创建导入数据

    背景:根据业务需要需要把60张主子表批量入库到hive表. 创建测试数据: 1 def createBatchTestFile(): Unit = { 2 for (layer <- 0 to ...

  7. sql 创建表,批量插入数据

    sql语言被用于数据库中记录的"增删改查",本文将介绍数据库中mysql数据库中利用sql语言创建表,批量插入数据. - -以下示例来自牛客网- - 1.创建表 创建一个actor ...

  8. MySQL批量入库的几种方式详解

    MySQL批量入库的几种方式详解 1. MySQL批量入库概述 2. Hutool封装jdbc方式 3. Jdbc直接或批量执行方式 4. MyBatis批量入库方式 5. MySQL批量入库总结 1 ...

  9. hbase批量入库的总结

    最近这一段时间一直在研究hbase的批量入库,看似简单的问题其实埋着无数的坑...... 接下来就把我遇到的一些问题和解决的办法分享给大家,希望能让那些新接触到的人不至于像我一样走这么多弯路. hba ...

最新文章

  1. 前端中会用到的设计模式之单一职责原则
  2. codis集群部署实战
  3. C++教程之lambda表达式一
  4. Mysql中遇到的错误
  5. P4878 道路修建-美国
  6. 情景喜剧消亡史:人人都爱,没人敢拍
  7. tp mysql 去重
  8. 更改via浏览器字体_【安卓】我心中的最佳手机浏览器
  9. [ACM_动态规划] hdu 1176 免费馅饼 [变形数塔问题]
  10. 某文件在桌面上,命令窗口中找不到,因为桌面是两个目录合成的
  11. 从架构设计到系统实施-基于.NET 3.0的全新企业应用之基于WCF的系统服务
  12. c语言求5个整数最小公倍数,C语言求两个正整数的最小公倍数和最大公约数
  13. pt-archiver 命令
  14. Kotlin 异常处理之 Option、Either、Result
  15. 非宁静无以致远 非淡泊无以明志
  16. OpenStack Cinder特性之Volume-backed image介绍与验证
  17. vue实现简单搜索功能
  18. Java开发实习经历01——寻找到入职(真实实习经历,希望对各位有帮助)
  19. Numpy提取多维数组的某行/列
  20. 15-移动端布局基础——DPI、PPI、物理像素、DPR、viewportcss像素、DPR

热门文章

  1. http中302与304
  2. JS中find方法的使用
  3. 网络工程师配置安全设备,防火墙基本配置管理
  4. what is MacPorts?
  5. 解决PS中:无法将图片存储为Web存储格式,及如何将图片大小修改成10KB的问题
  6. 网卡MAC地址相关信息大全(整理)(上)
  7. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程方法总结
  8. mantis系列:Linux系统mantis(bug管理系统)的安装搭建配置
  9. 大数据技术原理与应用(第三章 分布式文件系统HDFS)
  10. 图像处理3:Sobel边缘检测