CreateStatement 和 PrepareStatement 的优劣

最明显的区别,就是执行的sql语句格式不同。我们往上放两段代码来看看他们的区别把:

使用CreateStatement方法创建了stmt对象:

String sql = "select * from users where  username= '"+username+"' and userpwd='"+userpwd+"'";  
stmt = conn.createStatement();  
rs = stmt.executeQuery(sql);  

使用PrepareStatement方法创建了pstmt对象:

String sql = "select * from users where  username=? and userpwd=?";  
pstmt = conn.prepareStatement(sql);  
pstmt.setString(1, username);  
pstmt.setString(2, userpwd);  
rs = pstmt.executeQuery();  

PrepareStatement跟Statement的主要区别就是把上面sql语句中的变量抽出来了。

PrepareStatement较Statement有三大优点

优点一、增加代码可读性

优点二、ParperStatement提高了代码的灵活性和执行效率。

PrepareStatement接口是Statement接口的子接口,他继承了Statement接口的所有功能。它主要是拿来解决我们使用Statement对象多次执行同一个SQL语句的效率问题的。ParperStatement接口的机制是在数据库支持预编译的情况下预先将SQL语句编译,当多次执行这条SQL语句时,可以直接执行编译好的SQL语句,这样就大大提高了程序的灵活性和执行效率。

优点三:安全
String sql = "select * from user where username= '"+varname+"' and userpwd='"+varpasswd+"'";  

stmt = conn.createStatement();  

rs = stmt.executeUpdate(sql);  

这是验证用户名密码的,但把'or '1' = '1当作密码传进去,也就变成了

select * from user where username = 'user' and userpwd = '' or '1' = '1';  

这是个永真式,因为1永远等于1。所以不管怎样都能登录成功。

转载于:https://my.oschina.net/u/3802803/blog/1647819

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值