需求:在一个完整的项目里,要往另一个数据库中(新的数据源)批量插入数据,在保证插入的同时,手动控制事务。(要么全部插入成功,要么失败后全部不插入)。
因为项目中只有一个方法中涉及到新的数据源的插入,所以就没打算在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();
}
}
分享到:
相关推荐
内容为JDBC增删改查 ,事物处理, 批处理,以及预编译示例代码
PreparedStatement 预编译statement 的详细介绍java视频 马克java社区 马克-to-win
使用JDBC完成用户登录 2.SQL注入问题 3.PreparedStatement类 3.1.PreparedStatement和Statement的对比(面试题) 3.2.PreparedStatement和Statement的关系 3.3.小结 4.使用PreparedStatement完成登录 ...
【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入 - 副本.zip
JDBC基础教程之PreparedStatement.doc )
练习3:使用PreparedStatement插入宠物信息.zip
c3p0数据库缓冲池配置 ...d----最大的PreparedStatement的数量 e----每隔XXX秒检查连接池里的空闲连接 ,单位是秒 f----当连接池里面的连接用完的时候,C3P0获取的新连接的数量 g---是否每次都验证连接是否可用
什么时候用statement,什么时候用preparedstatement
5. 使用 PreparedStatement(视频7) 6. 利用反射及 JDBC 元数据编写通用的查询方法(视频8-9) 7. DAO 设计模式(视频10-12) 8. JDBC 元数据(视频13) 9. 获取插入记录的主键值(视频14) 10. 处理 Blob(视频15) 11. 处理...
1、JDBC(Java Database Connection):java连接数据库统一接口API,底层主要通过直接的JDBC驱动和 JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合...
由于和Druid数据库连接池耦合太大,在使用过程中发现了一系列问题,决定将JDBC和数据库连接池解耦。添加ElasticSearchDriver类可以直接使用Class.forName加载驱动。 3.0.0版本不再使用elasticsearch-sql实验项目关于...
【IT十八掌徐培成】Java基础第23天-02.sql注入-preparedstatement-批量插入.zip
JDBC连接所有数据库步骤 1 将数据库的JDBC驱动加载到classpath中,在基于JAVAEE的WEB应用实际开发过程中,通常要把目标...7 依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放所占用的资源。
String url = "jdbc:mysql://127.0.0.1:3306/jdbc?useUnicode=true&characterEncoding=utf-8"; String user = "root"; String password = "root"; String driver="com.mysql.jdbc.Driver"; try { Class.forName...
jdbc中preparedStatement比Statement的好处
jdbc2.0版 PreparedStatement接口的用法
jdk1.8可使用的jdbc驱动... DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。Driver:驱动程序,会将自身加载到DriverManager中去,并处理...
JDBC 中 PreparedStatement 接口提供的 execute、executeQuery 和 executeUpdate 之间的区别及用法 JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。...
我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...
在上面的代码中,我们使用了Connection和PreparedStatement对象来连接数据库和执行SQL语句。Connection对象用于建立数据库连接,而PreparedStatement对象用于执行参数化的SQL语句。PreparedStatement对象可以防止SQL...