如何快速批量插入数据到数据库中
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");
}
全部评论