首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

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

2013-10-14 
【学习】JDBC Connection 使用PreparedStatement 批处理----手动事务需求:在一个完整的项目里,要往另一个数

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

直接使用jdbc PreparedStatement 来批处理。

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();       }}

热点排行