批处理|学习笔记-阿里云开发者社区

开发者社区> -技术小能手-> 正文

批处理|学习笔记

简介: 快速学习批处理
+关注继续查看

开发者学堂课程【JDBC数据库开发入门:批处理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/29

批处理


内容简介

一、批处理的概念

二、批处理的运行

 

一、批处理的概念

批处理的概念就是一批一批的处理,原先处理数据库是一条一条的处理,发送一条语句过去,服务器执行一条。发一条执行一条对网络的传输来说过于频繁,往返的次数过多会影响效率,所以这时考虑到批处理,也就是客户端能不能一批一批的把sq语句运送到服务器,然后服务器一批一批的执行,所谓批可以理解成集合。

批处理有两种形式,一种是用Statement来完成,另一种是用PreparedStatement来完成,第一种不再介绍。现在主要介绍第二种PreparedStatement。

 

二、批处理的运行

如何做到一批一批的往外传送呢?

1.新创建一个Demo5。

首先介绍批处理。psrmt对象内部有集合,有集合可以理解为有批。

(1)用循环疯狂向pstmt中添加sql参数,它自己有模板,使用一组参数与模板没罚可以匹配出一条sql语句。

(2)调用它的执行批方法,完成向数据库发送!

2.实验

现在至少需要两个方法给我们提供,也就是说pstmt需要提供两个方法

(1) 添加参数到批中,

(2)执行批!复制三条代码:

Connection con=JdbcUtils.getConnection();

String sql="select from tab_bin";

PreparedStatement pstmt=con.prepareStatement(sql);

更改模板,用以下的表做实验:

image.png

清除数据 delete from t_stu ,接下来插入"INSERT INTO t_stu VALUES(?,?,?,?)"

3.疯狂的添加参数

设置参数for(int i=0;i<10000;i++),一万行记录需要往数据库里插。

第一个参数:pstmt.setInt(1,i+1);第一个是int类型

第二个参数:pstmt.setString(2,“stu_”+i);这就是stu0,stu1……

第三个参数:年龄,pstmt.setInt(3,i);第一个人0岁,最后一个人9999岁。

第四个参数:性别,pstmt.setString (4,i&2==0?“男”:“女”);

这些参数给完了思考一个问题:

现在是执行还是怎样?循环回来是否要把参数覆盖掉?

要记住:不要把参数扔了,循环回来还是一个参数,又重复了,所以有一个非常重要的代码:pstmt.addBatch();添加批,这一组参数就保存到集合中了。

然后循环回来又设置一组参数,又添加进去了,到现在为止循环完还未执行,所以最后的代码就是:pstmt. execteBatch(); 执行批

代码写完了,一共用了两个方法,一个是添加批,一个是执行批。

执行批更加耽误时间。添加批是发送。添加批内部有集合,执行批则是把集合一起发送。添加批相当于装车,而执行批相当于发车。

这时,需要记录时间:long start=System.currentTimeMillis();

long end=System.currentTimeMillis();

最后输出System.out.println(end-start);代码写完了。

如图:

image.png

4.测试

测试一下:select count(*) FROM t_stu;耐心等待,可以比较出来批处理到底快不快。这时的批处理较慢,是因为MySQL默认批处理是封闭的,打开它需要一个参数rewriteBatchedStatements=true把参数配到url处加一问号打开 然后保存,等这一遍执行完了,再来执行第二遍。一个是使用批处理的效果,一个不使用批处理的效果。当前数据库不支持批处理,只有把参数加上才能比较出来批处理到底快不快。

image.png

注意:Mysql不支持批处理是因为缺少变量,参数rewriteBatchedStatements=true一定要加在url后面,前面一定要加问号。Mysql是支持批处理的,代码一定要有变量。

一万条大概执行六分钟。算一下时间,用了412764毫秒,除以1000,得到秒,除以60,得到6.8794分钟。

输入代码:System.out.println(end-start)// 412764,6.8794分钟。

由于前面重复组建了,所以执行之前先清除数据库,输入:DELETE FROM t_stu,使一万行消失,得到0行。右键执行,得到520毫秒。一秒钟都用不上。以上是二者的区别,再次删掉执行,301毫秒。

这就是批处理的作用。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
LESS学习笔记1
个人理解:less是一个可以写函数的css
429 0
yum管理包流程_学习笔记
时间:2017.12.03作者:李强参考:man,info,magedu讲义,万能的internet声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
595 0
Click高级用法|学习笔记
快速学习Click高级用法
14 0
1280
文章
0
问答
来源圈子
更多
技术图谱:由专家组参与技术图谱的绘制与编写,知识与实践的结合让开发者们掌握学习路线与逻辑,快速提升技能 电子书:电子书由阿里内外专家打造,供开发者们下载学习,更与课程相结合,使用户更易理解掌握课程内容 训练营:学习训练营 深入浅出,专家授课,带领开发者们快速上云 精品课程:汇集知识碎片,解决技术难题,体系化学习场景,深入浅出,易于理解 技能自测:提供免费测试,摸底自查 体验实验室:学完即练,云资源免费使用
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载