背景:

需要更新一些不规范的时间格式,如将某个时间格式化为yy-MM-dd,实际上为 yy-MM-dd hh:mm:ss,并且需要提供回滚脚本。

例如:规范化时间的脚本如下:

update test set test_date=substring(account_date,1,10) WHERE test_date>'2017-06-01 00:00:00' AND test_date<'2017-09-07 00:00:00'

这个脚本是ok,但执行时受到影响的行数如果有几百条甚至上千条记录的话,回滚脚本怎么写呢?

模板如下:

update test set test_date= '' where id='';

1.首先,从test表中查出上述的参数:

select id,test_date from test where test_date>'2017-06-01 00:00:00' AND test_date<'2017-09-07 00:00:00'

将结果导入到文本中,名为为param.txt

2.然后运行以下java程序,打印出可执行的回滚脚本

    private void insertData() throws IOException{
FileReader reader = new FileReader("D:\\document\\load\\data1.txt");
BufferedReader br = new BufferedReader(reader);
String updateSql="update test set test_date= '' where id='';";
String line = null;
Integer count=0;
String[] param=new String[2];
String regexp = "\'\'";
while((line = br.readLine()) != null) {
param=line.split("\\\t");
String first=updateSql.replaceFirst(regexp,"\'"+param[1]+"\'");
String second=first.replaceFirst(regexp,"\'"+param[0]+"\'");
System.out.println(second);
count++;
}
br.close();
reader.close();
}

3.如果行数较多,需要打印到文件中(Console打印的记录数受限的)

    private void insertData() throws IOException{
FileReader reader = new FileReader("D:\\document\\load\\data1.txt");
BufferedReader br = new BufferedReader(reader);
StringBuffer sbf=new StringBuffer();
String updateSql="update test set test_date= '' where id='';";
String line = null;
Integer count=0;
String[] param=new String[2];
String regexp = "\'\'";
while((line = br.readLine()) != null) {
param=line.split("\\\t");
String first=updateSql.replaceFirst(regexp,"\'"+param[1]+"\'");
String second=first.replaceFirst(regexp,"\'"+param[0]+"\'");
//System.out.println(second);
sbf.append(second).append("\n");
count++;
}
writeFile("D:\\document\\load\\rollback.sql", sbf);
br.close();
reader.close();
} public void writeFile(String fileName,StringBuffer stf)
throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(stf.toString());
writer.close();
}

java实现sql批量插入参数的更多相关文章

  1. Java使用iBatis批量插入数据到Oracle数据库

    Java使用iBatis批量插入数据到Oracle数据库 因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数 ...

  2. SQL批量插入表类 SqlBulkInsert

    ado.net已经有了sqlBulkCopy, 但是那个用xml格式,网络传输数据量太大. 自己实现了一个,传输尽量少的字节. 性能没对比过,有需要的自己拿去测试. using System.Data ...

  3. java读取文件批量插入记录

    只是一个例子,方便以后查阅. import ey.db.oracle.OracleHelper; import ey.db.type.*; import java.io.BufferedReader; ...

  4. insert into select 与select into from -- sql 批量插入

    参考资料:http://www.w3school.com.cn/sql/sql_union.asp   UNION:操作符用于合并两个或多个select语句的结果集.                 ...

  5. Delphi中SQL批量插入记录

    http://www.cnblogs.com/azhqiang/p/4050331.html 在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式:   1.  ...

  6. Sql批量插入方法

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  7. sql 批量插入

    create  PROCEDURE insertinto as begindeclare @id int;set @id=1;while @id<10begininsert into perso ...

  8. 使用SQL批量插入数据到数据库 以及一些SQL函数的语法

    批量插入100条记录 set nocount on declare @i int=1; while @i<=100 begin Insert into Client(id,ClientCode, ...

  9. SQL 批量插入数据

    后面进行完善修改. /*批量插入数据*/ 这个比较完善.直接插入数据库表. INSERT INTO `goods_transverter` ( `code`,`es_id`,`barcode`, `n ...

随机推荐

  1. css round corner div and transition

    看stackoverflow上的圆角标签挺好看,自己动手试了下,用的属性是border-radius(即边框圆角半径,用px):加上transition effect,代码如下: <!DOCTY ...

  2. node linux服务器部署 centos

      1下载 wget https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz  2解压 tar xvf node-v6.9.5-linu ...

  3. (转)Oracle分区表和索引的创建与管理

    今天用到了Oracle表的分区,就顺便写几个例子把这个表的分区说一说: 一.创建分区表 1.范围分区 根据数据表字段值的范围进行分区 举个例子,根据学生的不同分数对分数表进行分区,创建一个分区表如下: ...

  4. aspnet_regiis加密文件提示路径中具有非法字符

    加密结果受当前目录影响,不知道是不是哪里操作错误,mark.   Web.config文件位置:E:\Web\Surgery 加密成功,上图命令最后有个".",表示web.conf ...

  5. 使用postman模拟登录请求

    Cookie 可以写在Headers里面

  6. 基于fullpage的自动播放,手动播放,暂停页面的功能

    功能如下: 1.默认加载方式为“自动播放 ”方式,即从第1屏至第5屏 页面循环加载显示,每屏每次仅显示1个页面,页面间停留时间为“10”秒2.手动播放过程中,按数字键“1”-“5”,将直接切到指定页面 ...

  7. KMP算法(推导方法及模板)

    介绍 克努斯-莫里斯-普拉特算法Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个词W的出现位置.此算法通过运用对这个词在不匹配时本身就包含足够的信 ...

  8. [剑指offer] 29. 顺时针打印矩阵 (for循环条件)

    思路: 先定义左上和右下角点坐标,打印可分为从左到右,从上到下,从右到左,从下到上.依次判断最后一圈的四个循环条件. #include "../stdafx.h" #include ...

  9. Updates were rejected because the remote contains work that you do(gitee报错解决方案)

    今天向Gitee远程仓库提交本地项目文件时,遇到了下列错误,很是郁闷 正在推送 1203笔记本Error: failed to push some refs to 'https://gitee.com ...

  10. Java多线程-锁的原理

    锁升级: 无锁->偏向锁->轻量级锁->重量级锁 sychronized原理: wait/notify