最近接到一个业务需要将一张表和同事一样,因为设置了唯一主键的关系,直接insert的话会异常,所以我将所有insert语句更改为update语句。

1.这是从同事电脑导出的sql文件(只是粘了一部分):

prompt Importing table gams_jc_assetclass...
set feedback off
set define off
insert into 表名 (ID, CARDDEFINE, CARDDEFINENAME)
values ('3755B565400004411CD54EF60E8348D5', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB');insert into 表名 (ID, CARDDEFINE, CARDDEFINENAME)
values ('3755B56540000461322D77FA1CC14083', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB');insert into 表名 (ID, CARDDEFINE, CARDDEFINENAME)
values ('3755B56540000481951785168353D811', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB');insert into 表名 (ID, CARDDEFINE, CARDDEFINENAME)
values ('3755B565400004A1D9F41574552BC272', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB');insert into 表名 (ID, CARDDEFINE, CARDDEFINENAME)
values ('3755B565400004C125E5C8BD187FBE44', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB');insert into 表名 (ID, CARDDEFINE, CARDDEFINENAME)
values ('3755B565400004E1C875EC1C1B0FA87E', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB');prompt Done.

2.新建一个sql文件,将sql改变为以下格式:

(将头尾删掉,每一条数据的括号置换为空,insertinto - 表名置换为空,通过置换将每条语句放在一行中)

ID, CARDDEFINE, CARDDEFINENAME values '3755B565400004411CD54EF60E8348D5', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB'
ID, CARDDEFINE, CARDDEFINENAME values '3755B56540000461322D77FA1CC14083', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB'
ID, CARDDEFINE, CARDDEFINENAME values '3755B56540000481951785168353D811', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB'
ID, CARDDEFINE, CARDDEFINENAME values '3755B565400004A1D9F41574552BC272', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB'
ID, CARDDEFINE, CARDDEFINENAME values '3755B565400004C125E5C8BD187FBE44', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB'
ID, CARDDEFINE, CARDDEFINENAME values '3755B565400004E1C875EC1C1B0FA87E', '100F4A9BE5D2F5BEFBB7C8FA0883835F', 'GAMS_CARD_TYSB'

3.然后就是代码了:

有点手懒,直接控制台输出了,粘出来时候检测下输出数量,不对的话去调整控制台输出大小,向直接输出到文件的话main方法最后一个list写一个输出流就好了

package com.jiuqi.io;import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;//读取sql文件
//将字符串以";"分隔作为list
//以value分隔将list<String>转变为List<Map>
//拼接字符串存入如list
//打印输出
//原来三千多条。现在转化出五百多条,而且全部是三条一个重复
public class test {private static final String star = "update 表名 set";private static final String end = ";";private static final String CARDDEFINE = " CARDDEFINE";private static final String CARDDEFINENAME = " CARDDEFINENAME";private static final String ID = "ID";//private static List<String> endList = new ArrayList<>();public static void main(String[] args) throws IOException {String path = "D:\\sql.txt";List<String> list = readSqlFile(path);List<Map<String,String>> listMap = spilStr(list);/*for (Map<String, String> map : listMap) {System.out.println(map);}*/List<String> sqlList = getStrSql(listMap);/*for (Map<String,String> item : listMap) {System.out.println(item.get(ID));}*/}//读取文件public static List<String> readSqlFile(String path) throws IOException {FileReader file = new FileReader(path);BufferedReader br = new BufferedReader(file) ;//将file转化为List<String> list = new ArrayList<>();String line ;while ((line = br.readLine()) != null) {list.add(line);// 一次读入一行数据//System.out.println(line);}return list;}//以value分隔数组,存入list<map>中public static List<Map<String,String>> spilStr(List<String> list) {String[] a ;String[] mapKey;String[] mapValue;List<Map<String,String>> listMap = new ArrayList<>();for (String item : list) {Map<String,String> map = new HashMap<>();if(!item.equals("") && null!=item) {a = item.split(" values ");//数组中前三个是key后三个是对应的valuemapKey = a[0].split(",");mapValue = a[1].split(",");for(int i =0 ; i < mapKey.length ; i ++) {map.put(mapKey[i], mapValue[i]);}listMap.add(map);}}return listMap;}/*private static final String star = "update gams_jc_assetclass set";private static final String end = ";\n";private static final String CARDDEFINE = " CARDDEFINE";private static final String CARDDEFINENAME = " CARDDEFINENAME";private static final String ID = "ID";*///组装sqlpublic static List<String> getStrSql(List<Map<String,String>> listMap){List<String> sqlList = new ArrayList<>();String sql ;for (Map<String,String> item : listMap) {sql = star + CARDDEFINE + "=" + item.get(CARDDEFINE) + "," +CARDDEFINENAME +"="+item.get(CARDDEFINENAME) +" "+ "where " + ID +"="+item.get(ID) + end ;sqlList.add(sql);}for (String sqlItem : sqlList) {System.out.println(sqlItem);}return sqlList;}
}

java将oracle导出表sql文件中的insert批量更改为update相关推荐

  1. sql文件中捕获异常_使用更改数据捕获监视SQL Server中的更改

    sql文件中捕获异常 背景 (Background) In multi-user environments, changes may occur frequently to the architect ...

  2. 怎么将oracle的sql文件转换成mysql的sql文件

    怎么将sql文件导入PowerDesigner中的方法(将oracle的sql文件转换成mysql的sql文件)呢? 怎么将xx.sql文件的数据库结构导入powerdesigner 的方法呢? 现讲 ...

  3. oracle数据库恢复aul_[数据库]oracle从dbf文件中恢复数据(通过AUL工具实现)

    [数据库]oracle从dbf文件中恢复数据(通过AUL工具实现) 0 2013-09-27 00:00:18 背景故事:前几天,硬盘故障导致oracle崩溃.重要数据丢失,只剩下孤零零的dbf文件. ...

  4. mysql 生明变量_在 MySQL 的 SQL 文件中,定义变量与使用变量

    1.现阶段存在一个新需求,需要在部署产品时,针对产品做一些初始化数据的工作.预先准备好相应的 SQL 文件.由于需要执行多条 SQL 语句,且后续的 SQL 语句依赖于之前的 SQL 语句生成的主键 ...

  5. mysql分隔符_在sql文件中设置MySQL分隔符

    我想在sql文件中设置分隔符(因为我不能依赖用户通过终端来做到这一点). 是否有一个mysql语句允许我设置分隔符? 运用 DELIMITER // 抛出错误. # Categories schema ...

  6. Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))

    Navicat因导入的sql文件中datetime有参数而报错的原因(例:datetime(3)) 异常原因 电脑安装的MySQL版本低于5.6版本,而MySQL在5.6及以后的版本中对time.ti ...

  7. oracle sql 符号,Oracle的SQL语句中如何处理‘’符号

    Oracle的SQL语句中如何处理'&'符号 在Oracle中,如果在sql中出现'&'符号,会被自动转义: 而被要求输入在&符号后跟随的字符串的值,例如: update ta ...

  8. bulkwrite 批量插入_SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg ( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位 ...

  9. doc类型文件中的图片批量加水印

    有一个doc/docx类型的文档,其中的图片均无水印,目的是快速实现快速给文档中所有的图片加上统一的水印. 参考视频:如何给word文件中的图片批量添加水印 1.首先,有一个文档,其中的图片都没有水印 ...

最新文章

  1. SpringBoot + Mybatis + Druid + PageHelper 实现多数据源并分页
  2. 大数据安全“脆弱性”凸显 防护成重要课题
  3. 科大星云诗社动态20201225
  4. linux中安装httpd安装错误,linux安装httpd和nginx常见问题及解决办法
  5. 【Python】校选课 第四周作业 py3.0
  6. Sublime Text 3 插件安装
  7. 7z解压crc错误_winrar压缩包提示crc校验和错误,文件被破坏的解决办法
  8. python docker实战_「docker实战篇」python的docker-docker镜像的创建使用dockerfile(3
  9. Java ---学习笔记(泛型)
  10. 《Python CookBook2》 第四章 Python技巧 对象拷贝 通过列表推导构建列表
  11. navacate连接不上mysql_解决navicat连接不上mysql服务器
  12. 简单电脑***《菜鸟级》
  13. 单源最短路(spfa+Dijkstra)附数据
  14. win10怎么用记事本打开html文件,Win10系统怎么打开记事本
  15. ADS使用Smith圆图进行阻抗匹配
  16. xp系统打开itunes显示服务器失败,windowsxp系统安装不了itunes的两种解决方法
  17. 测试开发自我介绍模板
  18. 2014TI杯(D题)带啸叫检测与抑制的音频功率放大器
  19. 广东外语外贸大学第16届程序设计竞赛-C 井大师的码魂
  20. html 自定义模态框,自定义对话框、模态框

热门文章

  1. const verify = ref(null)为什么是null
  2. 数据类型之字符串类型
  3. 大金中央空调拆装空调维修4008660030
  4. 首次服务器装系统教程,服务器安装系统教程
  5. logback记录日志无法入库
  6. 计算机上面的东西爆满怎么清理,电脑C盘满了怎么清理?一招帮你搞定
  7. 计算机能输入汉字是谁发明的,美国专家:为啥我们发明的键盘,中国人可以一上手就输入中文?...
  8. y空间兑换代码_如何用不到 2KB 的 JavaScript 代码写一个 3D 赛车游戏?
  9. ubuntu 12.04 安装openldap(不开启加密验证)
  10. 列表里面有字典[{},{},{},{}],按着字典的指定的key所对应的value值得大小排序