java实现sql批量插入参数
背景:
需要更新一些不规范的时间格式,如将某个时间格式化为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批量插入参数的更多相关文章
- Java使用iBatis批量插入数据到Oracle数据库
Java使用iBatis批量插入数据到Oracle数据库 因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数 ...
- SQL批量插入表类 SqlBulkInsert
ado.net已经有了sqlBulkCopy, 但是那个用xml格式,网络传输数据量太大. 自己实现了一个,传输尽量少的字节. 性能没对比过,有需要的自己拿去测试. using System.Data ...
- java读取文件批量插入记录
只是一个例子,方便以后查阅. import ey.db.oracle.OracleHelper; import ey.db.type.*; import java.io.BufferedReader; ...
- insert into select 与select into from -- sql 批量插入
参考资料:http://www.w3school.com.cn/sql/sql_union.asp UNION:操作符用于合并两个或多个select语句的结果集. ...
- Delphi中SQL批量插入记录
http://www.cnblogs.com/azhqiang/p/4050331.html 在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式: 1. ...
- Sql批量插入方法
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- sql 批量插入
create PROCEDURE insertinto as begindeclare @id int;set @id=1;while @id<10begininsert into perso ...
- 使用SQL批量插入数据到数据库 以及一些SQL函数的语法
批量插入100条记录 set nocount on declare @i int=1; while @i<=100 begin Insert into Client(id,ClientCode, ...
- SQL 批量插入数据
后面进行完善修改. /*批量插入数据*/ 这个比较完善.直接插入数据库表. INSERT INTO `goods_transverter` ( `code`,`es_id`,`barcode`, `n ...
随机推荐
- Shell Notes
查找: find: 实时查找,精确,速度慢,支持正则 find 查找路径 查找标准 查到后处理动作 查找路径默认当前目录,查找标准默认路径下所有文件,动作默认打印到屏幕 匹配标准: -name 'fi ...
- Axis2 1.7.4构建项目
1.下载axis2项目文件 http://axis.apache.org/axis2/java/core/download.html 2.Maven文件的pom.xml文件 3.将下载的axis2-1 ...
- Windows2012R2 时间同步设置
Windows2012R2里没有了internet时间,或者Internet时间无法同步成功,都可以尝试使用如下方法. 1.打开命令提示符, 输入:gpedit.msc,打开组策略管理器 2.执行上述 ...
- 僧多粥少?还原 OpenStack 的真实“钱景”
原文链接:http://www.oschina.net/news/57994/openstack-income-analysis 451 Research发布了OpenStack的收入分析预测,指出O ...
- 杭电 1012 u Calculate e【算阶乘】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1012 解题思路:对阶乘递归求和 反思:前面3个的输出格式需要注意,可以自己单独打印出来,也可以在for ...
- K8s的工作原理
title: Kubernetes之初探 subtitle: K8s的工作原理 date: 2018-09-18 18:26:37 --- K8s概述 我清晰地记得曾经读到过的一篇博文,上面是这样写的 ...
- Nginx+Php-fpm运行原理
一.代理与反向代理 现实生活中的例子 1.正向代理:访问google.com 如上图,因为google被墙,我们需要vpnFQ才能访问google.com. vpn对于“我们”来说,是可以感知到的(我 ...
- Disconf使用简单Demo
创建配置文件 在敲Demo之前,需要在Disconf上创建自己的APP,然后在APP的某个环境下创建配置文件,如下面截图中的流程,这里就简单创建了一个redis.properties,内容是redis ...
- 【深入理解Java虚拟机】自动内存管理机制——内存区域划分
Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...
- 51nod-活动安排问题之二
有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? 分析:能否按照之一问题的解法,每个教室安排尽可能多的活动,即按结束时间排序,再贪心选择不 ...