批处理,可以大幅度提升大量增、删、改的速度。
PreparedStatement.addBatch();//批量添加
PreparedStatement.executeBatch();//批量更新
public class BatchTest {
public static void main(String[] args) throws SQLException {
long start = System.currentTimeMillis();
for (int i = 0; i < 100; i++)
create(i);
long end = System.currentTimeMillis();
System.out.println("create:" + (end - start));
start = System.currentTimeMillis();
createBatch();
end = System.currentTimeMillis();
System.out.println("createBatch:" + (end - start));
}
//普通的添加方法
static void create(int i) throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql = "insert into user(name,birthday, money) values (?, ?, ?) ";
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "no batch name" + i);
ps.setDate(2, new Date(System.currentTimeMillis()));
ps.setFloat(3, 100f + i);
ps.executeUpdate();
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
//批量添加
static void createBatch() throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql = "insert into user(name,birthday, money) values (?, ?, ?) ";
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
for (int i = 0; i < 100; i++) {
ps.setString(1, "batch name" + i);
ps.setDate(2, new Date(System.currentTimeMillis()));
ps.setFloat(3, 100f + i);
ps.addBatch();
}
int[] is = ps.executeBatch();//int[] is是执行后自动生成的主键
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}