-
两者之间的联系:
-
Statement和PreparedStatement两者都是用来执行SQL查询语句的API之一
-
PreparedStatement接口继承了Statement接口
-
-
两者之间的区别:
-
Statement不对SQL语句做处理,直接交给数据库;而PreparedStatement是支持预编译的,会将编译好的SQL语句放在数据库端,相当于缓存.对于多次重复执行的SQL语句,使用PreparedStatement可以使得代码的执行效率更高
-
使用Statement对象.在对数据库只执行一次存取的时候,用Statement对象进行处理;PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处
-
执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象,通常认为PreparedStatement比Statement对象更有效
-
Statement的SQL语句使用字符串拼接的方式,非常容易导致出错,且存在SQL注入的风险 Preparedment使用"?"占位符,提升了代码的可读性和可维护性,并且这种绑定参数的方式,可以有效防止SQL注入
-
SQL注入:
SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令实例:
当我们用户在登录时,需要验证用户名和密码,对应后台的SQL语句为: SELECT * FROM tablename WHERE username = "***" AND password = "###", ###为传入的用户名和密码,根据SQL的返回结果来判断登录是否成功.这样就是我们在登录时后台进行的简单步骤
假如数据库中存在 username 为 123 , password 为 456 的信息,此时在用户登录界面输入信息,当信息与上面的匹配一致时,我们就会登录成功.但是假如我们把输入的password内容改为 111 or 1=1,生成的SQL语句就为 SELECT * FROM tablename WHERE usename = 123 AND password = 111 or 1=1.此时我们并没有输入正确的密码,但是在SQL语句中会判断出password后面的"1=1"为真,所以即使我们没有输入正确的密码,也能登录成功.这就是非法的SQL注入
-
-
07-21
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)