zoukankan      html  css  js  c++  java
  • 三、PreparedStatement对象(重点)

    一、PreparedStatement 特点:

    • PreparedStatement 接口继承Statement 接口
    • PreparedStatement 效率高于Statement
    • PreparedStatement 支持动态绑定参数
    • PreparedStatement 具备SQL 语句预编译能力
    • 使用PreparedStatement 可防止出现SQL 注入问题

    二、PreparedStatement的预编译能力

    2.1什么是预编译

      2.1.1SQL 语句的执行步骤

    •  语法和语义解析
    •  优化sql 语句,制定执行计划
    •  执行并返回结果

      但是很多情况,我们的一条sql 语句可能会反复执行,或者每次执行的时候只有个别的值不同(比如select 的where 子句值不同,update 的set 子句值不同,insert 的values 值不同)。如果每次都需要经

    过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。

      所谓预编译语句就是将这类语句中的值用占位符替代,可以视为将sql 语句模板化或者说参数化。

      预编译语句的优势在于:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止sql 注入

      2.1.2 解析过程

      (1)硬解析
        在不开启缓存执行计划的情况下,每次SQL 的处理都要经过:语法和语义的解析,优化器处理SQL,生成执行计划。整个过程我们称之为硬解析。

      (2) 软解析
        如果开启了缓存执行计划,数据库在处理sql 时会先查询缓存中是否含有与当前SQL语句相同的执行计划,如果有则直接执行该计划。

    三、预编译方式

      开始数据库的日志:

    • show VARIABLES like '%general_log%'
    • set GLOBAL general_log = on
    • set GLOBAL log_output='table'

      3.1 依赖数据库驱动完成预编译

        如果我们没有开启数据库服务端编译,那么默认的是使用数据库驱动完成SQL 的预编译处理。

      3.2 依赖数据库服务器完成预编译

        我们可以通过修改连接数据库的URL 信息,添加useServerPrepStmts=true 信息开启服务端预编译。

  • 相关阅读:
    简单dp总结
    一、极限总结
    最短路径之差分约束
    软工个人总结
    BETA事后总结
    BETA(7)
    BETA(6)
    BETA(5)
    Go 中的字符串相关操作
    Go 中的异常/错误处理
  • 原文地址:https://www.cnblogs.com/qiaoxin11/p/12817180.html
Copyright © 2011-2022 走看看