背景:

需要更新一些不规范的时间格式,如将某个时间格式化为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();
}

最新文章

  1. 给大家推荐一款高大上的代码高亮插件(sublime,github风格)——highlight.js
  2. 设计模式之美:State(状态)
  3. [原创]html5游戏_贪吃蛇
  4. java自带线程池和队列详细讲解
  5. Long和Date数据类型之间相互转换代码 - 调整时间推前往后,截取long型日期方法。
  6. 征服 Redis + Jedis + Spring (三)—— 列表操作【转】
  7. Android Intent 解析之二
  8. Write the code.Change the world.---WWDC2014
  9. bzoj 4567: [Scoi2016]背单词
  10. shell 批量修改较长字符串 字符串内容之间更换位置
  11. 【阿里云】在 Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务
  12. laravel整合vue 多入口解决
  13. CorelDRAW(cdr) 2018安装教程详解
  14. Fantasy of a Summation LightOJ - 1213 (快速幂)
  15. [原]Jenkins(十一)---jenkins使用管理员admin创建用户和分配权限
  16. 简单说明 Virtual DOM 为啥快
  17. Zookeeper 三台主机 Ha集群的搭建
  18. 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。System.Threading.ThreadAbortException
  19. swift的异常处理:本质是错误信息的传递方式
  20. 用C语言进行最基本的socket编程

热门文章

  1. 移动web开发常见的问题
  2. Android studio 隐藏toolbar上的app title
  3. dll文件:关于MFC程序不能定位输入点
  4. Lazy Stored Properties--无括号时为匿名函数
  5. Robot Framework(二)测试数据语法
  6. c++ socket C/S通信实例
  7. 移动端开发-Day1
  8. 打包c++项目
  9. Javascript解析URL
  10. 洛谷P1425 小鱼的游泳时间