JDBC那些事(三)——PreparedStatement预编译对象

来源:互联网 发布:php开源考试系统 编辑:程序博客网 时间:2024/06/06 15:12

“PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。”这是百度百科对PreparedStatement接口阐述的一句话。那么PreparedStatement具体又有什么好处呢。这些好处又是怎么提现的?下面通过代码分析来说明PreparedStatement的好处。

String sql = “select * from user where user_id=?”;PreparedStatement pstmt = con.prepareStatement(sql);pstmt.setString(1, “1001”);ResultSet rs = pstmt.executeQuery();
以上一段PreparedStatement执行sql的代码。我们发现在通过Connection对象创建PreparedStatemnet对象是需要一个sql语句。这个语句也可以理解为一个模版或者函数。其中“?”就是我们所要传参数的占位符。在得到了pstmt对象以后,我们需要通过setXXXX("参数位置编号",对应数据类型的参数)方法为sql模版传参,从而组装成一条完整的sql语句然后通过executeQuery()向数据库发送sql得到执行结果集ResultSet。此处我们和前面的Statement对象方式对比,似乎没什么大的区别只是感觉语句简明了一点,这样只是提高了代码的可读性和维护性。

还有非常重要的一点,PreparedStatement还能大大的提高效率,因为PreparedStatement对象会预编译sql模版。在以后执行相同的语句模版只需要传参给他就可以重复执行,而不需要在进行编译。这是PreparedStatement对象最大的有点。最后在提一点比较过失的,PreparedStatement还可以房子SQL攻击。不过这种SQL攻击在现在是基本不可能存在了,因为防止的方式很多。所以在实际的开发中基本都是用PreparedStatement。



0 0
原创粉丝点击