数据库批处理
批处理(batch)指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
批处理操作数据库的过程主要是分两步:
如何实现批处理 Statement和PreparedStatement都支持批处理操作,这里我们只说明PreparedStatement的批处理方式:
-
void addBatch() 将要执行的SQL先保存起来,先不执行 这个方法需要在在设置完所有的占位符之后调用 -
int[] executeBatch() 这个方法用来执行SQL语句,这个方法会将批处理中所有SQL语句执行 -
mysql默认批处理是关闭的,所以还需要去打开mysql的批处理: 需要在mysql的url地址中加入一下参数: rewriteBatchedStatements=true 例如:URL = “jdbc:mysql://127.0.0.1:3306/test?rewriteBatchedStatements=true”;
Demo 1.创建一张新的数据表 - //向test表中插入10000条数据
- @Test//测试批处理
- public void testBatch(){
- //向test表中插入10000条数据
- Connection connection = null;
- PreparedStatement ps = null;
- try {
- /*
- *获取数据库连接 数据库链接操作在此不进行赘述
- *原生数据库操作可参考:http://www.cnblogs.com/Mr-Dawei/p/7455324.html
- */
- connection=XXXX;
- //sql语句编写
- String sql = "INSERT INTO test(uname) VALUES(?)";
- //获取PrepareStatement
- ps = connection.prepareStatement(sql);
- //创建一个for循环,来设置占位符参数数
- for(int i = 0; i < 10000 ;i++){
- ps.setString(1,"test"+i);
- //添加到批处理方法中,调用无参的,有参的是Statement来调用的!
- ps.addBatch();
- }
- //获取一个时间戳 可以测试执行效率
- long start = System.currentTimeMillis();
- //统一执行执行批处理
- ps.executeBatch();
- //获取一个时间戳
- long end = System.currentTimeMillis();
- System.out.println("共花费了:"+(end-start));
- } catch (SQLException e) {
- e.printStackTrace();
- } finally{
- //逆序关闭资源
- }
- }
复制代码
参考文章: https://www.cnblogs.com/Mr-Dawei/p/7455496.html |