jdbc操作数据库Statement和prepareStatement的区别

Statement和prepareStatement的区别

两个接口都是用来实现,然后将sql语句传入实现后的对象,并通过对象发送给数据库,但是两种方式又有很大的区别。接下来就说一下它们两个的区别。

首先从它们的实例化方式来说:

Statement的实例化方式是通过Conection的实例调用createStatement方法来完成的;

而prepareStatement是Conection的实例调用prepareStatement方法来返回一个prepareStatement的对象。

再来说他们发送sql语句的方法:

Statement会调用它的executeQuery方法,将sql语句以字符串的形式传入这个方法中,这个方法会返回数据库的结果集。这种方式调用一次方法只能传入一段确定的sql语句,因为这段sql语句是确定的,所以它只是满足了该次调用的需求,无法进行复用,如果需要写入其他的sql语句就要重新键入新的sql语句。如以下代码:

Statement statement=Conection.creatStatement ;

ResultSet resultset=Statement .executeQuery(“select name from table;”);//name为列名

而PrepareStament的方式呢,它在创建对象时就要将所用到的sql语句作为参数传入其中,被传入的sql语句并不是准确的sql语句,它所传入的sql语句可以说是个sql填空题,这里会用到“?”这个占位符。

代码如下:

PreareStatement prearestatement =Connection.preareStatement(“select ? fron table;”);

可以看到在向PrepareStament的实例传入的sql语句并不是一个完整的sql语句。所以我们可以再调用PreareStatement 的setInt和setString还有setDate等方法来向“?”所在的位置传入值,这样就可以组成一个完整的sql语句。代码如下:

prearestatement.setString(1,“sex”);//这里的1为占位符的角标,从一开始,sex是向占位符处所传入的数据。这里的String代表的是传入的数据的类型。

之后再调用PrepareStament的executeUpdate方法来获取一个ResultSet对象,

ResultSet resultset=prearestatement.executeUpdate;

当然了上面示例代码里只用了一个占位符来举例,其实占位符可以有多个,只要你能够灵活的运用PrepareStament的各种set方法来组成一个合适的sql语句,就能完成一次sql操作并返回一个结果集ResultSet 的对象。

可以看出PrepareStatement的方式更为灵活,达到了一次编译多次复用,PrepareStatement会把先传入的sql语句传到数据库中进行预编译,这种方式对于批量处理sql语句可以提高很多的效率。

还有最后一方面就是安全性的问题,

PrepareStatement的方式可以隔绝一些数据本身的漏洞攻击。具体是怎样的攻击,我暂时没细研究,所以就到这里了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值