如何快速批量插入数据到数据库中

261
0
public void batchJDBC(List<MemberBonusDTO> paramList) 
{
    long startTime = System.currentTimeMillis();
    Connection conn = null;
    PreparedStatement stmt = null;
    String sql = "INSERT INTO member_bonus ( member_id, have_time, arrive_time, mem_bouns, coin_id,total) VALUES ( ?, ?, ?, ?, ?, ?)";
    try 
   {

        //Register JDBC driver
        Class.forName("com.mysql.jdbc.Driver");
        System.setProperty("jdbc.driver", "com.mysql.jdbc.Driver");

        //Open a connection
        log.info("Connecting to a selected database...");
        conn = DriverManager.getConnection(jdbcConfig.getDbURRL(), jdbcConfig.getUsername(), jdbcConfig.getPassword());
        log.info("Connected database successfully...");


        stmt = conn.prepareStatement(sql);

        conn.setAutoCommit(false);
        for (int i = 0; i < paramList.size(); i++) {
            stmt.setLong(1, paramList.get(i).getMemberId());
            stmt.setString(2, paramList.get(i).getHaveTime());
            stmt.setString(3, paramList.get(i).getArriveTime());
            stmt.setBigDecimal(4, paramList.get(i).getMemBouns());
            stmt.setString(5, paramList.get(i).getCoinId());
            stmt.setBigDecimal(6, paramList.get(i).getTotal());

            stmt.addBatch();
            if (i % 2000 == 0) {
                stmt.executeBatch();
                conn.commit();
            }
        }
        stmt.executeBatch();
        conn.commit();
        log.info("Inserted records into the table...");
    } catch (SQLException se) {
        //Handle errors for JDBC
        se.printStackTrace();
    } catch (Exception e) {
        //Handle errors for Class.forName
        e.printStackTrace();
    } finally {
        //finally block used to close resources
        try {
            if (stmt != null) {
                conn.close();
            }

        } catch (SQLException se) {
        }// do nothing
        try {
            if (conn != null) {
                conn.close();
            }

        } catch (SQLException se) {
            se.printStackTrace();
        }
    }
    long endTime = System.currentTimeMillis();
    log.info("------批量操作SQL:" + sql);
    log.info("------执行时间:" + (endTime - startTime) + "ms");

}

全部评论