JDBC 3.0 特性:命名参数 — 在 PreparedStatement 中使用 Oracle Database 10g JDBC API

JDBC 3.0 特性:命名参数 — 在 PreparedStatement 中使用 Oracle Database 10g JDBC API

日期:2004 年 1 月 14 日

目标

本文档将帮助您了解:
? 如何使用新推出的 Oracle Database 10g JDBC API,以便在 Java 类的 PreparedStatement 中使用命名参数。
? 如何运行示例 Java 应用程序,演示在 JDBC 代码中用于命名参数的 Oracle 专用 JDBC API。

目录

引言
必要条件
所需软件
在 JDBC 中使用 Oracle 专用 API 来绑定 PreparedStatement 的参数
运行示例 Java 应用程序
有用参考

引言

JDBC(Java 数据库连接)是连接 Java 与关系数据库的标准 Java 接口。JDBC 标准由 Sun Microsystems 定义,允许独立供应商自行实施和扩展该标准。

除了支持标准 JDBC API,Oracle 驱动程序还拥有支持 Oracle-专用数据类型并提高性能的扩展。本文档介绍了新的 Oracle JDBC 10g 专用 API,用于在 JDBC 类中设置 PreparedStatement 对象的命名参数。有关 Oracle JDBC 的详细信息,请参阅本文档中有用参考部分。

必要条件

要完成本方法文档,必须简要了解 JDBC 的基本概念以及如何使用 JDBC API 连接数据库进行基本的 CRUD(创建、读取、更新和删除)操作 — 这是基本的数据库操作。此外,您需要了解基本的 Oracle 数据库概念。

所需软件

  • Oracle Database 10g.可以从此处下载数据库。
  • Oracle Database 10g JDBC 驱动程序。可以从此处下载。
  • JDK1.4.x 或更高版本可以从 此处下载。

注意:JDBC 驱动程序类在 Oracle 客户端或数据库安装版本中提供,不需要单独下载。

在 JDBC 中使用 Oracle 专用 API 来绑定 PreparedStatement 的参数

说明

Oracle JDBC 10g 通过提供两套 API 来支持命名参数。

  • set(String, ...)
  • setAtName((String, ...)

set(String, ...) 是用于 CallableStatement 特性的 JDBC 3.0 命名参数的一部分,并且只能用于 CallableStatement。参数名是 IN、OUT 或 INOUT 参数的实际名称。可以参考此 OTN 示例: "NamedParameters”,该示例演示如何在 CallableStatement 中使用命名参数。

setAtName(String,...) 是 Oracle Database 10g JDBC 驱动程序的一部分;这些驱动程序是在 PreparedStatement 中使用的 Oracle 专用 API。参数的 SQL 语法举例来说,应该是 ”:num” 用于名为 ”num” 的参数。

"SELECT * FROM table1 WHERE column3 < :num AND column5 > :num"

使用 setAtName(String,...) 的好处在于,如果变量显示一次以上,您只需将其绑定一次。对于先前提到的 SQL 语句,您只需调用一次 setIntAtName("num", 100)

示例情况:

让我们来看一个数据库表:PRODUCT_INFORMATION 存储产品信息,如:产品标识号、名称、说明、最低价格、定价等。我们应该使用 Oracle 专用 API 从 Java 类的 PreparedStatement 中检索产品信息。

以下 SQL 语句在数据库中创建 "PRODUCT_INFORMATION” 表以及几条记录。

注意:该表在 Oracle 数据库安装版本的 ”OE” 模式中提供。

SQL 脚本:
SQL> CREATE TABLE product_information(PRODUCT_ID           NUMBER(6)      NOT NULL,
PRODUCT_NAME VARCHAR2(50) NOT NULL,
PRODUCT_DESCRIPTION VARCHAR2(2000) NOT NULL,
MIN_PRICE NUMBER(8,2),
LIST_PRICE NUMBER(8,2));
SQL> INSERT INTO product_information VALUES(2400, 'DIMM - 512 MB',
'512 MB DIMM memory. Improved memory upgrade granularity', 380, 448);
SQL> INSERT INTO product_information VALUES(2401, 'DIMM - 64MB',
'Memory DIMM: RAM, 64MB (100-MHz Unregistered ECC SDRAM)', 202, 247);
SQL> INSERT INTO product_information VALUES(2402, 'EDO - 32MB',
'Memory EDO SIM: RAM, 32 MB (100-MHz Unregistered ECC SDRAM)', 149, 179);

以下代码段演示如何使用 Oracle Database 10g JDBC API 进行 ”SELECT” 操作。请参阅 UsingOracleNamedParameters.java 文件,以得到完整的可运行 Java 类。

     ..........

//Database Connection object
Connection conn = null;

// OraclePreparedStatement object
OraclePreparedStatement pstmt = null;

// ResultSet object
ResultSet rst = null;
.......

// Create SQL query statement to retrieve records from product_information
// table in the database.
String sqlString = "SELECT product_id, product_name, product_description,"
+ "list_price, min_price FROM product_information "
+ "WHERE product_name LIKE :pname AND "
+ "list_price <= :price AND min_price <= :price";

// Connect to the database.
......

// Use OraclePreparedStatement
pstmt = (OraclePreparedStatement)conn.prepareStatement(sqlString);

String val = "%"+name+"%";

// Use Oracle Specific APIs to set the values for the bind parameters
// in the SQL statement. Note that price is bound only once.
pstmt.setStringAtName("pname",val);
pstmt.setIntAtName("price", priceVal);

// Execute the query.
rst = pstmt.executeQuery();
............

运行示例 Java 应用程序

  • 将类文件 UsingOracleNamedParameters.java 此处复制到一个目录,例如 UsingOracleNamedParameters
  • UsingOracleNamedParameters 目录中,将 JDBC 驱动程序类包括在 CLASSPATH 中。
    • 在 JDK 1.4.x 中使用 ojdbc14.jar
    • 还要将当前目录 (.) 包括在 CLASSPATH 中。
  • 确保已经创建了含有几条记录的数据库表 ”product_information”。参阅 SQL 脚本以了解详细信息。
  • 编辑文件 UsingOracleNamedParameters.java 设置数据库详细信息。更改文件中的以下各行:

    // Set database URL details.
    String url = "jdbc:oracle:thin:@localhost:1521:orcl";

    // Get the database connection.
    conn = DriverManager.getConnection(url,"oe","oe");

    提供创建该表的用户名和口令。保存此文件。

  • 使用以下命令编译 Java 文件:
    javac -d .UsingOracleNamedParameters.java
  • 使用以下命令运行该类:
    java oracle.otnsamples.jdbc.UsingOracleNamedParameters

    该命令将输出显示如下:

    name:DIMM - 512 MB listprice:448 minprice:380
    name:DIMM - 64MB listprice:247 minprice: 202

有用的参考


请在 OTN 示例代码论坛中发表您对此示例的意见。
寄送此页面
Printer View 打印机视图