JDBC小总结

一:小例子

在这里插入图片描述

这段代码是模板代码:需要自己管理连接,自己进行参数封装,自己处理接结果,自己处理异常。针对这些缺点,一些ORM框架就派上用场了:mybatis

二:自动加载驱动

在DriverManager中有一个静态方法:
在这里插入图片描述
首先检查是否通过配置的方式注册了驱动,基本上不用。
在这里插入图片描述
核心是下面的SPI方式加载:
在这里插入图片描述

这个iterator实际上代理到了:ServiceLoader的lookupIterator上
lookupIterator的hasNextService方法
在这里插入图片描述
lookupIterator的nextservice方法
在这里插入图片描述

三:优化效率

1:优化JDBC读取效率

setFetchSize设置:Statement和ResultSet都可以设置。

在这里插入图片描述
或者对结果集进行设置:
在这里插入图片描述

mysql驱动默认的行为是需要把整个结果全部读取到内存中才开始允许应用读取结果。如果查询数据太多可能导致内存OOM或者阻塞很长时间。所以期望使用流式方式读取,只要有数据就可以读。

如何mysql的流式解析?
需要满足三个条件:forward-only,read-only,fatch size=Integer.MIN_VALUE。
forward-only read-only也是mysql驱动的默认值·所以只需要指定fetchsize,ps.setFetchSize(Integer.MIN_VALUE)。

也可以在url上指定fetchsize:defaultFetchSize参数设置

2:批量写提高写操作效率

单条写入问题:大量io,大量事务日志操作消耗性能。批量提交提高效率。

url添加参数:rewriteBatchedStatements=true

然后使用 ps.addBatch();批量提交。

3:使用连接池管理连接

在这里插入图片描述

四:参考

http://www.mamicode.com/info-detail-197484.html
https://blog.csdn.net/qq_37556726/article/details/99002051(mybatis中使用批量)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章