jdbc批量插入
来源:互联网 发布:手机小夜灯软件 编辑:程序博客网 时间:2024/05/21 12:22
jdbc批量插入, 一定要关闭事物的自动提交, 否则效率会非常慢, 对于插入出现异常的一批数据, 暂时做整体回滚操作!
package com.thinkive.import_data.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.ResourceBundle;import oracle.sql.DATE;import org.apache.log4j.Logger;import com.thinkive.import_data.bean.Bean;/** * @desc: * @author: zona * @time: 2016年11月29日 下午12:33:41 */public class DBHelp {private static Logger logger = Logger.getLogger(DBHelp.class);private static Connection conn;private static PreparedStatement ps;private static SimpleDateFormat format = new SimpleDateFormat(Constants.DATE_FORMATE_yyyyMMddHHmmss);public static final String SQL_INSTALL_IDNO_THIRD = "INSERT INTO t_stkkh_idno_third (ID, IDNO, NAME, VERIFY_RESULT, VERIFY_TIME, CHANNEL_TYPE, CREATE_TIME, UPDATE_TIME) VALUES (seq_stkkh_idno_third.nextval, ?,?,?,?,?,?,?)";/** * 获取连接对象 * @return 连接对象 * @throws Exception */private static Connection getConnection() throws Exception {// 在项目根目录下配置oracle.properties文件, 配置url,username,password; ResourceBundle jdk1.7中可以用来读取配置文件的类ResourceBundle rb = ResourceBundle.getBundle("oracle");Class.forName("oracle.jdbc.driver.OracleDriver");String url = rb.getString("url");conn = DriverManager.getConnection(url, rb.getString("username"), rb.getString("password"));return conn;}/** * 执行增删改操作 * @param sql语句 * @param beans封装bean的集合 * @param pattern 日期格式 * @return int 影响行数 * @throws Exception */public static int[] executeUpate(String sql,List<Bean> beans, String pattern) throws Exception{if(pattern !=null && pattern.length() > 0) {format = new SimpleDateFormat(pattern);}if(conn == null) {conn=getConnection();}// 关闭事物自动提交conn.setAutoCommit(false);try {ps=conn.prepareStatement(sql);//注入参数if(beans!=null && beans.size() > 0){int k = 1;for (Bean bean : beans) {java.sql.Timestamp date = new java.sql.Timestamp(new Date().getTime());ps.setObject(k++, bean.getIdno());ps.setObject(k++, bean.getName());ps.setObject(k++, bean.getVerify_result());ps.setTimestamp(k++, new java.sql.Timestamp(format.parse(bean.getVerify_time()).getTime()));ps.setObject(k++, bean.getChannel_type());ps.setTimestamp(k++, date);ps.setTimestamp(k++, date);k = 1;// 添加到批处理ps.addBatch();}}int[] res = ps.executeBatch();conn.commit();return res;} catch (SQLException e) {conn.rollback(); logger.error("部分数据导入失败", e);}finally {ps.clearBatch();if(ps != null) {ps.close();ps = null;}}return new int[] {0};}/** * 关闭资源 */public static void closeSources(Connection conn, PreparedStatement ps){try {if (ps != null) {ps.close();ps = null;}if (conn != null) {conn.close();conn = null;}} catch (SQLException e) {logger.error("数据库关闭失败");}}public static Connection getConn() {return conn;}public static PreparedStatement getPs() {return ps;}public static void main(String[] args) throws Exception {List<Bean> beans = new ArrayList<Bean>();beans.add(new Bean());beans.add(new Bean());beans.add(new Bean());// 批量插入executeUpate(SQL_INSTALL_IDNO_THIRD, beans, "");// 关闭链接closeSources(conn, ps);}}
0 0
- JDBC的批量批量插入
- JDBC的批量批量插入
- JDBC 批量插入记录
- jdbc 批量插入
- JDBC的批量插入
- Jdbc 批量插入
- jdbc批量插入
- jdbc批量插入数据
- jdbc批量插入2
- JDBC批量插入
- jdbc批量插入数据库
- Jdbc批量插入
- JDBC批量插入数据
- JDBC 批量插入
- JDBC批量插入
- jdbc批量插入
- jdbc批量插入
- jdbc批量插入
- JS的checkbox实现全选
- JAVA线程对象管理
- web前端之dojo(用javascript语言实现的开源DHTML工具包)
- NEFU 19 采药
- 一般前端UI框架的DataGrid如何处理
- jdbc批量插入
- 精通JavaScript攻击框架:AttackAPI(上)
- ContentType 内容类型
- windows核心编程-线程可警告状态以及APC队列
- 寻找自幂数
- 查找图元方法中遇见的MapX的Bug
- mybatis-generator扩展教程系列 -- 自定义配置参数修改DAO,Mapper文件后缀
- leetcode-46. Permutations
- Android爬坑-iconfont动态加载