zoukankan      html  css  js  c++  java
  • oracle学习笔记(七) 预编译Statement介绍与使用

    预编译Statement优点

    • 执行效率高
      由于预编译语句使用占位符 ”?”,在执行SQL之前语句会被先发送到Oracle服务器进行语法检查和编译等工作,并将SQL语句加入到Oracle的语句缓冲池里,随后再对SQL语句中的占位符”?”设置定值。
      那么也就说如果你要执行1000行插入的时候第一次先SQL语句发送给Oracle服务器处理,接着以后只传递值给占位符就可以了。
      因此它不需每次传递大量的SQL语句也无需对每条SQL语句做语法检查和编译所以比较高效。
    • 安全,可防止SQL注入攻击
    //用户登录的时候,假设有下面的语句
    select * from  student where username='' and password=''
    //写为字符串为
    String sql = "select * from  student where username='"+username+"' and password='+password+"'"
    //用户如果输入' or 1=1 --
    //对应的SQL语句
    select * from  student where username='' or 1 =1 -- and password=''
    //上面这句SQL等同于下面
    select * from  student 
    
    • Statement执行过长语句,拼接字符串很繁琐,容易出错

    使用

    1.创建预编译语句对象

    通过Connection对象来穿件一个预编译语句的对象

    PrepareStatement ps = conn.prepareStatement("select * from student where num = ? and name = ?")
    

    2.设置占位符的内容

    占位符的索引从1开始,使用setXxx方法,数据要跟列的数据对应
    Void setXxx((int parameterIndex, Xxx value); Xxx表示相应的数据类型。
    设置点位符位置的值,第一个参数是 1,第二个参数是 2,…..

    ps.setInt(1,12);
    ps.setString(2,"张三");
    

    3.执行

    - `boolean	execute()`	
    	在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。
    - `ResultSet executeQuery()`  
    	在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
    - `int executeUpdate()`	
    	在此 `PreparedStatement` 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句	
    	比如 `INSERT`、`UPDATE` 或 `DELETE` 语句;	
    	或者是无返回内容的 SQL 语句,比如 `DDL` 语句。	
    	返回一个已修改数据库中的数据数目数
    
    ```
    ps.executeQuery();
    ```
    

    Statement与PrepareStatement比较

    Statement PreparedStatement
    创建语句对象的方法 Connection.createStatement( ) Connection.preparedStatement( sql )
    查询 executeQuery( sql ) 要提供SQL语句 executeQuery( ) 不提供提供SQL语句,但随后要设置占位符的值
    插入、更新、删除 executeUpdate( sql ) 要提供SQL语句 executeUpdate( ) 不提供提供SQL语句
    执行语句 execute() execute()
  • 相关阅读:
    金额数字每隔3位用逗号区分
    tomcat结合shiro无文件webshell的技术研究以及检测方法
    python使用p12个人证书发送S/MIME加密,签名邮件
    CVE-2020-9484 tomcat session反序列化漏洞分析与复现
    Apache CommonCollection Gadget几种特殊的玩法
    weblogic t3协议回显穿透nat思路
    weblogic T3/iiop 回显分析
    ysoserial gadget之DNSURL gadget分析及实战利用
    CVE-2020-2555 weblogic 反序列化gadget 复现
    通达OA最新RCE漏洞分析
  • 原文地址:https://www.cnblogs.com/stars-one/p/10777663.html
Copyright © 2011-2022 走看看