数据库-PreparedStatement

数据库的执行类似于Java的编译执行过程。

SQL语句翻译为执行计划,才能执行。

SQL语句完全一样的情况下会重用执行计划。

关于执行计划:

1.任何SQL执行过程都是先编译“执行计划”,再执行“执行计划”

2.数据库为了优化性能,在SQL相同时候,会重用执行计划

        -执行计划编译较慢

        -重用执行计划可以提高数据库性能

3.数据库只在SQL语句完全一样的时候才重用相同的执行计划

        -如果SQL语句中有一个字符的更改,也会执行不同的执行计划

        -SQL中一个空格或者一个大小写不同也会创建不同的执行计划

>PreparedStatement 好处是可以重复使用执行计划,提高DB效率

使用步骤:

1。将带参数的SQL发送到数据库创建执行计划

2。替换执行计划中的参数

3。执行执行计划,得到结果


PreparedStatement原理

-Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句。

-Statement每执行一次都要对传入的SQL语句编译一次,效率较差。

-某些情况下,SQL语句只是其中的参数有所不同,其余子句完全相同,适用于PreparStatement

-预防SQL注入攻击

何为注入攻击:

用户输入了含有SQL成分的参数,参数在拼接SQL时造成SQL语句的语义改变!进一步改变SQL语句的执行计划!最终的执行结果就完全改变!

如何避免:

1.拦截用户输入的SQL成分

2.固定执行计划,避免改变执行逻辑

主要是防止statement执行计划时,用户在输入密码是做了sql拼接工作,直接输入成了万能密码。


下面的代码重复执行了同一个执行计划,做到了计划的重用。

插入语句:



查询语句:



更新语句:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值