JDBC基本教程之PreparedStatement
当前位置:以往代写 > JAVA 教程 >JDBC基本教程之PreparedStatement
2019-06-14

JDBC基本教程之PreparedStatement

JDBC基本教程之PreparedStatement

概述

该 PreparedStatement 接口担任 Statement,并与之在两方面有所差异:

PreparedStatement 实例包括已编译的 SQL 语句。这就是使语句“筹备好”。包括于 PreparedStatement 工具中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句建设时未被指定。相反的,该语句为每个 IN 参数保存一个问号(“?”)作为占位符。每个问号的值必需在该语句执行之前,通过适当的setXXX 要领来提供。

由于 PreparedStatement 工具已预编译过,所以其执行速度要快于 Statement 工具。因此,多次执行的 SQL 语句常常建设为 PreparedStatement 工具,以提高效率。

作为 Statement 的子类,PreparedStatement 担任了 Statement 的所有成果。别的它还添加了一整套要领,用于配置发送给数据库以代替 IN 参数占位符的值。同时,三种要领 execute、 executeQuery 和 executeUpdate 已被变动以使之不再需要参数。这些要领的 Statement 形式(接管 SQL 语句参数的形式)不该该用于 PreparedStatement 工具。

1、建设 PreparedStatement 工具

以下的代码段(个中 con 是 Connection 工具)建设包括带两个 IN 参数占位符的 SQL 语句的 PreparedStatement 工具:

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");

pstmt 工具包括语句 "UPDATE table4 SET m = ? WHERE x = ?",它已发送给DBMS,并为执行作好了筹备。

2、通报 IN 参数

在执行 PreparedStatement 工具之前,必需配置每个 ? 参数的值。这可通过挪用 setXXX 要领来完成,个中 XXX 是与该参数相应的范例。譬喻,假如参数具有Java 范例 long,则利用的要领就是 setLong。setXXX 要领的第一个参数是要配置的参数的序数位置,第二个参数是配置给该参数的值。譬喻,以下代码将第一个参数设为 123456789,第二个参数设为 100000000:

pstmt.setLong(1, 123456789);
pstmt.setLong(2, 100000000);

一旦配置了给定语句的参数值,就可用它多次执行该语句,直到挪用clearParameters 要领排除它为止。在毗连的缺省模式下(启用自动提交),当语句完成时将自动提交或还原该语句。

假如根基数据库和驱动措施在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement 可执行多次。假如这一点不创立,那么试图通过利用PreparedStatement 工具取代 Statement 工具来提高机能是没有意义的。

操作 pstmt(前面建设的 PreparedStatement 工具),以下代码例示了如何配置两个参数占位符的值并执行 pstmt 10 次。如上所述,为做到这一点,数据库不能封锁 pstmt。在该示例中,第一个参数被配置为 "Hi"并保持为常数。在 for 轮回中,每次都将第二个参数配置为差异的值:从 0 开始,到 9 竣事。

pstmt.setString(1, "Hi");
for (int i = 0; i < 10; i++) {
 pstmt.setInt(2, i);
 int rowCount = pstmt.executeUpdate();
}

3、IN 参数中数据范例的一致性

setXXX 要领中的 XXX 是 Java 范例。它是一种隐含的 JDBC 范例(一般 SQL 范例),因为驱动措施将把 Java 范例映射为相应的 JDBC 范例(遵循该 JDBCGuide中§8.6.2 “映射 Java 和 JDBC 范例”表中所指定的映射),并将该 JDBC 范例发送给数据库。譬喻,以下代码段将 PreparedStatement 工具 pstmt 的第二个参数配置为 44,Java 范例为 short:

pstmt.setShort(2, 44);

驱动措施将 44 作为 JDBC SMALLINT 发送给数据库,它是 Java short 范例的尺度映射。

措施员的责任是确保将每个 IN 参数的 Java 范例映射为与数据库所需的 JDBC 数据范例兼容的 JDBC 范例。不妨思量数据库需要 JDBC SMALLINT 的环境。假如利用要领 setByte ,则驱动措施将 JDBC TINYINT 发送给数据库。这是可行的,因为许大都据库可从一种相关的范例转换为另一种范例,而且凡是 TINYINT 可用于SMALLINT 合用的任那里所

    关键字:

在线提交作业