【学习】JDBC Connection 使用PreparedStatement 批处理----手动事务

需求:在一个完整的项目里,要往另一个数据库中(新的数据源)批量插入数据,在保证插入的同时,手动控制事务。(要么全部插入成功,要么失败后全部不插入)。
因为项目中只有一个方法中涉及到新的数据源的插入,所以就没打算在SPRING中托管两个数据源,并批量管理事务(这个方案太麻烦)。

[b]直接使用jdbc PreparedStatement 来批处理。[/b]

DEMO如下:(主要步骤如下)


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import java.util.HashMap;
import java.util.List;

public class TestPs{

//**数据库配置********************************
String ORACLE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
String ORACLE_USERNAME = "test";
String ORACLE_PASSWORD = "test";

public void excute(){
List<HashMap> list = query();//取得列表的方法,略。

//处理数据
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(ORACLE_URL, ORACLE_USERNAME, ORACLE_PASSWORD);

try{
conn.setAutoCommit(false); //设置不会自动提交
PreparedStatement ps = conn.prepareStatement("insert into TESTTABLE values (?, ?, ?)");
for(int i = 0;i<list.size();i++){
HashMap map = list.get(i);
ps.setString(1, map.get("id").toString());
ps.setString(2, map.get("name").toString());
ps.setString(3, map.get("age").toString());
ps.addBatch();
}
ps.executeBatch();//执行批量插入
ps.close();

conn.commit(); //提交事务
conn.close();

}catch(Exception e){
try{
conn.rollback(); // 操作不成功,回滚事务
}catch(SQLException r){
System.out.println("回滚事务出错!" + r.getMessage());
}
System.out.println(e.getMessage());
}
conn.close();
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值