经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
oracle学习笔记(七) 预编译Statement介绍与使用 - Stars-one
来源:cnblogs  作者:Stars-one  时间:2019/4/28 8:57:36  对本文有异议

预编译Statement优点

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

    使用

    1.创建预编译语句对象

    通过Connection对象来穿件一个预编译语句的对象
  1. PrepareStatement ps = conn.prepareStatement("select * from student where num = ? and name = ?")

2.设置占位符的内容

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

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

3.执行

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

Statement与PrepareStatement比较

Statement PreparedStatement
创建语句对象的方法 Connection.createStatement( ) Connection.preparedStatement( sql )
查询 executeQuery( sql ) 要提供SQL语句 executeQuery( ) 不提供提供SQL语句,但随后要设置占位符的值
插入、更新、删除 executeUpdate( sql ) 要提供SQL语句 executeUpdate( ) 不提供提供SQL语句
执行语句 execute() execute()

原文链接:http://www.cnblogs.com/kexing/p/10777663.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号