Statement和PreparedStatement之间的区别

 我来答
公子张小白
2016-09-26 · 知道合伙人教育行家
公子张小白
知道合伙人教育行家
采纳数:976 获赞数:13382
毕业于山东理工大学,有良好的英语口语以及交流能力,现从事关于英语相关的翻译以及文档整理工作。

向TA提问 私信TA
展开全部

  Statement:

  Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。

  PreparedStatement:

  java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果已经是稍有水平的开发者,就应该始终以PreparedStatement代替Statement. 也就是说,在任何时候都不要使用Statement。

  如何选择使用:

  1. 选择PreparedStatement还是Statement取决于要怎么使用它们。对于只执行一次的SQL语句选择Statement是最好的.相反,如果SQL语句被多次执行PreparedStatement是最好的。

  2. PreparedStatement: 数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量采用使用?号的方式传递参数),如果sql语句只执行一次,以后不再复用。

  3. 从安全性上来看,PreparedStatement是通过?来传递参数的,避免了拼sql而出现sql注入的问题,所以安全性较好。在开发中,推荐使用 PreparedStatement。

北京智新超越教育科技有限公司
2016-06-28 · 让好习惯成为家庭快乐的源泉
北京智新超越教育科技有限公司
智新超越教育集团,位于北京市清华科技园创业大厦,成立于2008年,是一家以养成教育,培育好习惯为中心,以促进青少年健康成长为宗旨,专门从事习惯养成、脑力开发、思维训练、品格培养的教育机构
向TA提问
展开全部
Prepared 是表示要预编译 SQL (请求服务器去先编译),之后可以跑循环之类的而省掉编译过程。同时使用 PreparedStatement 时用参数的办法能避免 SQL 注入漏洞,推荐任何时间都使用 PreparedStatement (特别需要用到参数的时候)。

SQL 注入是这样的:
select 1 from users where username='" + name + "' and passwd='" + password + "'";

那么入侵者可以在网页上填 上用户名和密码凑出:
name= " ' or 1 = 1' "
password = " ' or 1 = 1 ' "

这样你把这两个变量替换到字符串之后完整的 SQL 变成了:
select 1 from users where username = '' or 1 = 1 and password = '' or 1 =1;

这里面应该最后 一个 1 = 1 是成立的,所以入侵者不知道用户名和密码也成功登录到网站了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式