超简单使⽤批处理(batch)操作数据库超简单使⽤批处理(batch)操作数据库
批处理(batch)是什么
批处理的执⾏就好⽐快递员的⼯作:
未使⽤批处理的时候,快递员⼀次从分发点将⼀件快递发给客户;
使⽤批处理,则是快递员将所有要派送的快递都⽤车带到发放处派给客户。
批处理(batch)操作数据库
批处理指的是⼀次操作中执⾏多条SQL语句,批处理相⽐于⼀次⼀次执⾏效率会提⾼很多。
批处理操作数据库的过程主要是分两步:
1.将要执⾏的SQL语句保存
2.执⾏保存的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";
演⽰实例:
1.创建⼀张新的数据表
CREATE TABLE test (
id INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(50)
)
2、测试源码
1//向test表中插⼊10000条数据
2              @Test//测试批处理
3public void testBatch(){
4//向test表中插⼊10000条数据
5                      Connection connection = null;
6                      PreparedStatement ps = null;
7try {
8/*
数据库简单吗
9                *获取数据库连接数据库链接操作在此不进⾏赘述
10                *原⽣数据库操作可参考:wwwblogs/Mr-Dawei/p/7455324.html
11                */
12                            connection=XXXX;
13//sql语句编写
14                            String sql = "INSERT INTO test(uname) VALUES(?)";
15//获取PrepareStatement
16                            ps = connection.prepareStatement(sql);
17//创建⼀个for循环,来设置占位符参数数
18for(int i = 0; i < 10000 ;i++){
19                                    ps.setString(1,"test"+i);
20//添加到批处理⽅法中,调⽤⽆参的,有参的是Statement来调⽤的!
21                                    ps.addBatch();
22                            }
23//获取⼀个时间戳可以测试执⾏效率
24long start = System.currentTimeMillis();
25//统⼀执⾏执⾏批处理
26                            ps.executeBatch();
27//获取⼀个时间戳
28long end = System.currentTimeMillis();
29                            System.out.println("共花费了:"+(end-start));
30                      } catch (SQLException e) {
31                            e.printStackTrace();
32                      } finally{
33//逆序关闭资源
34                    }
35              }
    通过操作结果我们可以清楚地看出其中批处理执⾏的效率提升多么明显本⼈对批处理的了解浅显,若过路的诸位发现任何不对之处,还请多多之处。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。