jdbc批量插入

    xiaoxiao2021-12-14  19

    jdbc批量插入, 一定要关闭事物的自动提交, 否则效率会非常慢, 对于插入出现异常的一批数据, 暂时做整体回滚操作!

    [java]  view plain  copy 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;      /**   * @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; <span style="font-family: Arial, Helvetica, sans-serif;">ResourceBundle jdk1.7中可以用来读取配置文件的类</span>           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);       }   }  
    转载请注明原文地址: https://ju.6miu.com/read-963078.html

    最新回复(0)