Statement和PreparedStatement的区别及联系

  • 两者之间的联系:

    • 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注入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会写代码的菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值