PreparedStatement与Statemnt语句的差别及PreparedStatement语句的优势

(1)差别

1PreparedStatement接口继承Statement接口PreparedStatement提供了一种预编译的sql语句功能,这种sql能在java上根据运行时的需要进行重用,但和数据库本身对sql的预编译完全是两回事情。


2PreparedStatement能接受带?号的String作为sql语句,并且在执行之前你可以对那些sql语句中出现的 ?号根据具体需要进行赋值,所以PreparedStatement接口比Statement多提供了一堆setInt,setDate之类的方法,就是对?号进行替换时用的。所以PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率。


3使用preparedstatement的字符串不是动态创建的。这允许jvm(javavirtualmachine,java虚拟机)和驱动/数据库缓存语句和字符串并提高性能。preparedstatement也提供数据库无关性。当显示声明的sql越少,那么潜在的sql语句的数据库依赖性就越小。只有在完全是因为性能原因或者是在一行sql语句中没有变量的时候才使用通常的statement。


(2)PreparedStatement语句的优势

1代码的可读性和可维护性

虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码从可读性和可维护性上来说,都比直接用Statement的代码高很多档次。


2 PreparedStatement尽最大可能提高性能

每一种数据库都会尽最大努力对预编译语句提供最大的性能优化。因为预编译语句有可能被重复调用,所以语句在被DB的编译器编译后的执行代码被缓存下来,下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个函数)就会得到执行。这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配,那么在任何时候就可以不需要再次编译而可以直接执行。而statement的语句中,即使是相同一操作,由于每次操作的数据不同,所以使整个语句相匹配的机会极小,几乎不太可能匹配。


3极大地提高了安全性

传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。

在公共Web站点环境下,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序来个SQL注入,那就有麻烦。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值