你所不知道的jdbc操作

来源:互联网 发布:最长单词c 语言 编辑:程序博客网 时间:2024/05/23 07:25

对于Jdbc操作的statement 和 preparedStatement,网络上面已经有太多的声明和定义

今天,梳理一下基本的定义和你所不知道的一些。

statement和preparedStatement 都是接口,preparedStatement 继承statement。




也就是说后者在实现前者功能的基础上,肯定是做了优化和改良的。(长江后浪推前浪,前浪...)

以下是2种对象的声明和调用方式

statement


prepareStatement


以下是资料梳理的各自的优缺点

1.整体代码的可读性和可维护性。

   preparedStatement 是强于statement的,statement的拼接字符串是很难去维护和便于程序员查看的。

2.PreparedStatement预编译,尽最大可能提高性能。

   PreparedStatement操作的语句是预编译的,编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中。而对于statement,对于每一个sql语句,每次去操作都是进行编译处理的。


3.最重要的一点是preparedStatement 极大地提高了安全性,防止恶意sql注入的问题。

[' or '1' = '1] [万能密码]

而在实际应用中,当我们了解和熟悉二者的区别和各自的优缺点之后,怎么使用取决于你。


下面是个人总结的整体性能方面的内容

1.statement单条执行插入的效率是优化prepareStatement至少2倍的。

而prepareStatement是支持批量插入的,效率是statement的至少XX倍。

以下是具体的3者之间的1W和100W数据的测试结果

1W数据

100W数据


23秒,你没有看错,走过路过,不要错过,23秒,你看到的不是假的。

执行preparedStatement Batch jdbc连接串必须加下rewriteBatchedStatements=true,效率是杠杠的!


PreparedStatement被用来多次执行INSERT语句. 在这里,pst.executeUpdate() 执行了100次INSERT操作, 共有101次网络往返. 其中,1次往返是预储statement, 另外100次往返执行每个迭代。

当在100次INSERT操作中使用pst.executeBatch()方法时, 只有两次网络往返. 1次往返是预储statement, 另一次是执行batch命令. 虽然Batch命令会用到更多的数据库的CPU周期, 但是通过减少网络往返,性能得到提高. 记住, JDBC的性能最大的增进是减少JDBC驱动与数据库之间的网络通讯。


0 0