JDBC
日期:2003 5 月 14 日
如何使用 JDBC 和 Oracle9i 数据库存储和检索多语言数据
在看完本方法文档后,您应该能够理解数据库如何支持多语言数据以及如何使用 JDBC 检索这样的数据。
简介
Oracle9 I 数据库支持各同级别的全局化。我们将集中讨论使用列类型 NVARCHAR2 存储和检索多语言数据的独有特性。SQL NCHAR/NVARCHAR2 数据类型中使用的编码被指定为本地数据库字符集。编码可以是 AL16UTF16 或 UTF8。该列类型存储 Unicode 字符。
Unicode 是一种通用编码字符集,它允许您使用一种字符集来存储任何语言的信息。Unicode 为每一个字符提供唯一的编码,而不管是什么平台、程序或语言。
所以 NVARCHAR2 这种数据类型可用于那些需要存储多语言数据的字段 。
运行示例的前提条件
为了运行这里提供的示例,您需要
Oracle9i JDeveloper 9.0.3(可从 OTN 下载)或
Oracle9i AS Containers for J2EE ( OC4J ) 版本 9.0.3(可从 OTN 下载)
Oracle 9i 数据库服务器(可从 OTN 下载
Apache Ant 1.4.x,如果您准备部署在 OC4J 上(可从 Apache 下载)。
源文件(可从此处 下载。
说明
我们将有一个叫做 Products 的表,表中的列定义如下所示
id - VARCHAR2(10) — 产品 id lang_id — VARCHAR2(10) — 产品描述的语言 id description — NVARCHAR2(2000) — Unicode 编码的产品描述
我们将有两个类来操纵该表。
一个简单的 Javabean Product,它代表 Products 表中的一个记录。这个 bean 有用于该字段的 getter 和 setter。
ProductManager 类定义对该表的一些操作,如 addProduct、deleteProduct 和 getProduct。
JSP 文件 display.jsp 和 add.jsp 将被用于显示/添加/删除产品。
JDBC 允许 Java 程序访问 Oracle9 i 数据库中的 NVARCHAR2 数据类型的列。Oracle JDBC 驱动程序把 SQL NCHAR/NVARCHAR2 列中的数据从本地字符集编码(UTF8 或 AL16UTF16)直接转化为 UTF-16 编码的 Java 字符串。 为此,我们需要把 Java 字符串绑定到一个 NVARCHAR2 列。下面的代码段显示了完成这项任务的代码。
// Get an Oracle preparedstatement OraclePreparedStatement orastmt =(OraclePreparedStatement)connection.prepareStatement( "INSERT INTO PRODUCTS VALUES(?,?,?)") ; // Bind the 3rd parameter to NVARCHAR2 form so that the data is stored as unicode orastmt.setFormOfUse(3,OraclePreparedStatement.FORM_NCHAR); orastmt.setString(1,product.getId()); orastmt.setString(2,product.getLangId()); orastmt.setString(3,product.getDescription()); orastmt.executeUpdate(); orastmt.close();
我们使用 orastmt.setFormOfUse() 方法来指定列的类型是 NVARCHAR2。这将确保数据将以 Unicode 编码存储。
从该列检索数据很简单,只需使用普通的 JDBC 代码。
PreparedStatement stmt = connection.prepareStatement("SELECT * PRODUCTS WHERE ID=?"); stmt.setString(1,id); ResultSet rSet = stmt.executeQuery(); if(rSet.next()){ Product product = new Product(); product.setId(rSet.getString("ID")); product.setLangId(rSet.getString("LANG_ID")); product.setDescription(rSet.getString("DESCRIPTION")); rSet.close(); stmt.close(); return product; }
当在 JSP 中显示 Unicode 数据时,我们要在页面的开始把字符设置为 UTF 8。
<%@ page contentType="text/html;charset=UTF-8 "%>
当接受来自 HTML 表单的用户输入时,我们把用于请求的字符编码设置为 UTF 8。
request.setCharacterEncoding("UTF-8 ");
运行示例
从 Oracle9i JDeveloper 运行
连接到 Oracle9i 数据库并运行脚本 create_table.sql
在 Oracle9i JDeveloper 中打开文件 Globalization.jws
修改 ProductManager.java 中的变量 JDBC_URL,USER 和 PASSWORD 的值
选择 Globalization.jpr 并选择 Run。这将把应用程序部署到嵌入的 OC4J。您可以在浏览器中看见一列产品,有些是英文的,有些是日文的。您可以使用 'Add new product' 链接,以您希望的语言输入一个新产品的明细。
在 OC4J 上运行,
启动 OC4J。
在命令提示符,设置环境变量 ANT_HOME、JAVA_HOME、OC4J_HOME 和 OC4J_HOST
例如: c:\Globalization\set ANT_HOME=d:\ant141 c:\Globalization\set JAVA_HOME=d:\jdk1.3.1_01 c:\Globalization\set OC4J_HOME=d:\oc4j903 c:\Globalization\set OC4J_HOST=localhost:23791
例如: c:\Globalization\ant
使浏览器指向 http://:/Globalization/display.jsp
总结
在这份方法文档中您学习了如何使用字符编码模式和 NVARCHAR2 数据类型从 Oracle9 i 存储和检索各种不同语言的数据。
资源