admin 管理员组

文章数量: 1184232


2024年3月12日发(作者:eclipse快捷键代码补全使用不了)

JSP 预处理语句的优点

预处理语句具有两个主要的优点:

 查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多

次。当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要

执行查询的计划。对于复杂查询来说,如果要重复执行许多次有不同参数

的但结构相同的查询,这个过程会占用大量的时间,使得应用变慢。通过

使用一个预处理语句就可以避免重复分析、编译、优化的环节。简单来说,

预处理语句使用更少的资源,执行速度也就更快。

 传给预处理语句的参数不需要使用引号,底层驱动会处理这个。如果应用

独占地使用预处理语句,就可以确信没有SQL注入会发生。

正因为预处理语句是如此有用,它成了PDO惟一为不支持此特性的数据库提

供的模拟实现。这使你可以使用统一的数据访问规范而不必关心数据库本身是否具

备此特性。

在JDBC组件中,PreparedStatement接口创建表示预编译的SQL语句的对象。

SQL语句经过预编译,并存储在PreparedStatement对象中。然后,此对象可用来有

效地多次执行此语句。PreparedStatement接口继承Statement类,并与之在两方面有

所不同:

 PreparedStatement实例包含已编译的SQL语句。由于PreparedStatement对

象已预编译过,所以其执行速度要快于Statement对象。因此,多次执行

的SQL语句经常创建为PreparedStatement对象,以提高效率。

 包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参参。

IN参数的值在SQL语句创建时未被指定。相反的,该语句为每个IN参数

保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,

通过适当的SetXXX方法来提供。

作为Statement的子类,PreparedStatement继承了Statement的所有功能。另外

它还添加了一整套方法,用于设置发送给数据库以取代IN参数占位符的值。同时,

三种方法execute、executeQuery和executeUpdate已被更改又以使其不再需要参数。

这些方法的Statement形式(接受SQL语句参数的形式)不应该用于

PreparedStatement对象。其详细信息如表6-6所示:

表6-6 PreparedStatement接口方法

方法名称

clearParameters()

execute()

executeQuery()

功能描述

立即清除当前参数值

执行任何种类的SQL语句

在此PreparedStatement对象中执行SQL查询,

并返回由该查询生成的结果集

executeUpdate()

setBoolean (int parameterIndex, boolean x)

在此PreparedStatement对象中执行 SQL

INSERT、UPDATE 或 DELETE 语句

将指定的参数设置为Java boolean值。当它发送

至数据库时,DB2 Everyplace JDBC驱动程序将

它转换为SQL SMALLINT值

setBytes(int parameterIndex, byte[ ]x)

setDate(int parameterIndex, Date x)

setDouble(int parameterIndex, double x)

将指定的参数设置为字节的Java数组

将指定参数设置为值

将指定的参数设置为Java双精度值。当它发送

至数据库时,DB2 Everyplace JDBC驱动程序将

它转换为 SQL DECIMAL值

setInt (int parameterIndex, int x)

setNull (int parameterIndex, int sqlType)

targetSqlType)

将指定的参数设置为Java int值

将指定的参数设置为SQL NULL

setObject(int parameterIndex, Object x, int 使用给定对象来设置指定参数的值

上述表格中,setxxx类型方法还有setLong()、setString()等,其含义和表格中方

法相同,这里就不在介绍。


本文标签: 语句 使用 参数 对象