场景1: org.springframework.jdbc.core.JdbcTemplate一般在web项目中使用,使用时需要启动web服务。有时调试时,需要简单做些数据库操作,没必要每次启动web服务,这样太烦,直接在main函数中调用简单有效。
场景2: 最近碰到个情况,由于服务异常,在生产库日志表写入了5000万条记录,日志内容相同严重影响查询,在PL/SQL Developer工具手动删除数据,一个sql跑了10个小时,没把数据删除.手动删除时,delete语句执行完毕后需要手动提交,时间长后忘记提交了,等去提交时,连接都断开了.于是写java代码每个小时数据删一次,一次一次删,10几分钟完成。
以下介绍详细情况:
1.简单建表语句<本次使用的Oracle数据库>
create table zbz_log
(
id NUMBER(16) not null,
start_time DATE,
end_time DATE,
log_content VARCHAR2(256),
succ_flag VARCHAR2(8),
fail_reason VARCHAR2(512)
)
2.本文涉及两个类一个是获取JdbcTemplate实例,一个是包含main函数的类
2.1 JdbcTemplate实例化与设置类
package com.zbz.test;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.druid.pool.DruidDataSource;
/**
*
* @ClassName: DbOperationUtils
* @date: 2018-12-25 下午8:21:30
*/
public class DbOperationUtils {
/**
* 数据库连接需要的字符串
* */
public static final String username = "zbzdb";
public static final String password = "123456";
public static final String jdbcUrl = "jdbc:oracle:thin:@127.0.0.1:1521/orcl";
public static final String driverName = "oracle.jdbc.OracleDriver";
public static JdbcTemplate getJdbcTemplate() {
// com.alibaba.druid.pool.DruidDataSource
DruidDataSource dataSource = new DruidDataSource();
// 设置数据源属性参数
dataSource.setPassword(password);
dataSource.setUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setDriverClassName(driverName);
// 获取spring的JdbcTemplate
JdbcTemplate jdbcTemplate = new JdbcTemplate();
// 设置数据源
jdbcTemplate.setDataSource(dataSource);
return jdbcTemplate;
}
}
2.2 main函数中使用JdbcTemplate实例与sql操作
package com.zbz.test;
import java.util.ArrayList;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
/**
*
* @ClassName: TestDbOperation
* @date: 2018-12-25 下午8:30:26
*/
public class TestDbOperation {
public static void main(String[] args) {
System.out.println("测试开始.....");
JdbcTemplate jtdb = DbOperationUtils.getJdbcTemplate();
List<String> delLogs = new ArrayList<String>();
for(int hour=0;hour <18; hour ++){
String time1 = String.valueOf(hour);
String time2 = String.valueOf(hour+1);
String delLog = getSql(time1,time2);
delLogs.add(delLog);
}
System.out.println("输出开始....");
for(int i=0;i<delLogs.size();i++){
String sql= delLogs.get(i);
System.out.println(sql);
jtdb.update(sql);
}
System.out.println("输出结束....");
System.out.println("测试结束.....");
}
/**
* 组装sql
* */
public static String getSql(String hour1,String hour2){
String delLog = "DELETE from zbz_log\n" +
" WHERE LOG_CONTENT = '监控服务平台'\n" +
" AND FAIL_REASON = '程序抛出异常!'\n" +
" AND START_TIME >= TO_DATE('20181221"+ " " + hour1 + ":00:00', 'yyyymmdd hh24:mi:ss')\n" +
" AND START_TIME <= TO_DATE('20181221"+ " " + hour2 + ":00:00', 'yyyymmdd hh24:mi:ss')";
return delLog;
}
}
3.组装后的sql
DELETE from zbz_log
WHERE LOG_CONTENT = '监控服务平台'
AND FAIL_REASON = '程序抛出异常!'
AND START_TIME >= TO_DATE('20181221 16:00:00', 'yyyymmdd hh24:mi:ss')
AND START_TIME <= TO_DATE('20181221 17:00:00', 'yyyymmdd hh24:mi:ss')
以上,TKS.