• 三、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 信息开启服务端预编译。

  • 相关阅读:
    玲珑学院-ACM比赛1014
    扩展欧几里得算法
    中国剩余定理(孙子定理)及实现----原理详解
    搞懂树状数组
    HDU3792---Twin Prime Conjecture(树状数组)
    树状数组 模板
    HDU1541--Stars(树状数组)
    HDU4046--Panda(树状数组)
    CCF-201604-1-折点计数
    CCF-201604-2-俄罗斯方块
  • 原文地址:https://www.cnblogs.com/qiaoxin11/p/12817180.html
Copyright © 2020-2023  润新知