如何将 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();
|
|
可以在此处查看完整的源代码。
运行示例的前提条件
您需要具备以下条件才能运行此示例 -
部署和运行示例
该示例的源代码在 此处提供。 复制并在您的工作目录下保存该文件。
| 第 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 示例代码论坛中发表您对此示例的意见。
|