如何将 NCHAR 数据绑定指定为系统或连接

如何将 NCHAR 数据绑定指定为系统或连接属性

日期:2004 年 2 月 16 日

如何将 NCHAR 数据绑定指定为系统或连接属性

完成此方法文档后,您应该能够:
  • 在处理 SQL NCHAR 数据类型(NCHAR、NVARCHAR2 和 NCLOB)时使用 defaultNChar 属性。
  • 通过覆盖 CHAR 数据类型的缺省属性来提高性能。

引言

本代码示例演示了如何在处理 SQL NCHAR 数据类型(NCHAR、NVARCHAR2 和 NCLOB)时正确使用 defaultNChar。

读者应该熟悉的内容

要理解本文档,读者应该具备关于 JDBC 和 Oracle 数据库的基本知识。

说明

Unicode 是一种通用的字符编码方案,允许用户使用单个字符集存储所有主要语言的信息。Unicode 为每一个字符提供唯一的编码值,而不管是什么平台、程序或语言。
SQL NCHAR 数据类型(NCHAR、NVARCHAR2 和 NCLOB)允许用户在数据库中存储所有的 Unicode 数据。不管数据库字符集是说明设置,Unicode 字符都可以存储在属于这些数据类型的列中。

要将 Java 串插入到 NCHAR、NVARCHAR2 和 NCLOB 列中,开发人员必须在每个本地语言列上调用 setFormOfUse()。因为在缺省情况下,oracle.jdbc.OraclePreparedStatement 将所有列看作 CHAR、VARCHAR2 或 CLOB。在本版本中,如果将系统属性 oracle.jdbc.defaultNChar 设为 true,则 JDBC 将所有字符列看作属于本地语言。defaultNChar 的缺省值为 false。要设置 defaultNChar,需要指定下列命令行:

java -Doracle.jdbc.defaultNChar=true yourApplicationName

如果愿意,您的应用程序可以将 defaultNChar 指定为连接属性。在设置该属性后,您的应用程序不必调用 setFormOfUse() 即可访问 NCHAR、NVARCHAR2 或 NCLOB 数据。

以下的代码示例假定 oracle.jdbc.defaultNChar 设置为 true,因而不必显式调用 setFormOfUse()。


String query = "INSERT INTO product_detail(itemid,itemtype,description,langid) VALUES ( ?, ?, ?, ?)";

PreparedStatement pstmt = conn.prepareStatement(query) ;

pstmt.setInt(1,100); /* NUMBER Column */

pstmt.setString(2,"Book"); /* NVARCHAR2 Column */

pstmt.setString(3,"Oracle Database 10g"); /* NVARCHAR2 Column */

pstmt.setString(4,"Eng"); /* VARCHAR2 column */

pstmt.execute();

但是,如果将 defaultNChar 设置为 true,然后访问 CHAR 列,则数据库将会隐式地将所有 CHAR 数据转换为 NCHAR。这种转换对性能具有实质性的影响。为避免发生这种情况,需要为语句中引用的每个 CHAR 调用 setFormOfUse(4,Const.CHAR)。
以下代码利用 setFormOfUse() 来解决性能开销。


String query = "INSERT INTO product_detail(itemid,itemtype,description,langid) VALUES ( ?, ?, ?, ?)";

OraclePreparedStatement pstmt = (OraclePreparedStatement)conn.prepareStatement(query) ;

pstmt.setInt(1,100); /* NUMBER column */

pstmt.setString(2,"Book"); /* NVARCHAR2 column */

pstmt.setString(3,"Oracle Database 10g"); /* NVARCHAR2 column */

pstmt.setFormOfUse(4, Const.CHAR); /* Set the CHAR to access VARCHAR2 column */

pstmt.setString(4,"Eng"); /* VARCHAR2 column */

pstmt.execute();



可以在此处查看完整的源代码。

运行示例的前提条件

您需要具备以下条件才能运行此示例 -

  • JDK1.4.x 或更高版本。可以从此处下载。
  • 运行 SQL*Net TCP/IP Listener 的 Oracle Database 10g 或更高版本。可以从此处下载。

  • Oracle Database 10g JDBC 驱动程序。可以从此处下载。

部署和运行示例

该示例的源代码在 此处提供。 复制并在您的工作目录下保存该文件。

第 1 步 通过执行以下命令来提取示例源文件。该命令将在您的工作目录下创建 NChar 目录。

jar -xvf NChar.jar
第 1 步

在 sql 提示符处使用 scott/tiger 连接到数据库。运行以下命令创建 product_detail 表;

CREATE TABLE product_detail (
itemid NUMBER(4) , itemtype NVARCHAR2(50), description
NVARCHAR2(500), langid VARCHAR2(50)
);
第 2 步 通过执行以下命令,将ojdbc14.jar 包括在 classpath 中。

export CLASSPATH=$ORACLE_HOME/jdbc/lib/ojdbc14.jar:$CLASSPATH

其中 ORACLE_HOME 是安装 oracle 数据库的目录。
第 3 步

在命令提示符处,转到 NChar 目录,并通过执行以下命令来编译源文件,

javac oracle/otnsamples/jdbc/NChar.java

第 4 步

通过执行以下命令来运行 Java 程序,

java oracle.otnsamples.jdbc.NChar

此外,还可以通过将 oracle.jdbc.defaultNChar 指定为系统属性来运行示例。
将 NChar.java 文件中的 connProps.setProperty("oracle.jdbc.defaultNChar","true") 一行标识为注释,并按照第 3 步来编译源文件。然后执行以下命令来运行示例,

java -Doracle.jdbc.defaultNChar=true oracle.otnsamples.jdbc.NChar

总结

本方法文档说明在使用 NCHAR 数据类型时如何使用 defaultNChar 属性。


请在 OTN 示例代码论坛中发表您对此示例的意见。





寄送此页面
Printer View 打印机视图