欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle学习笔记(七) 预编译Statement介绍与使用

程序员文章站 2022-05-25 20:57:52
预编译Statement优点 执行效率高 由于预编译语句使用占位符 ”?”,在执行SQL之前语句会被先发送到Oracle服务器进行 语法检查和编译 等工作,并将SQL语句加入到Oracle的 语句缓冲池 里,随后再对SQL语句中的占位符”?”设置定值。 那么也就说如果你要执行1000行插入的时候第一 ......

预编译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()