14

我们正在构建一个由我们使用 JDBC(驱动程序ojdbc6.jarorai18n.jar)访问的 Oracle 数据库支持的 Java 应用程序。数据库模式主要使用NVARCHAR2数据类型存储文本列。

JDBC的JDBC文档ResultSet说它getNString()特别适用于 NCHAR、NVARCHAR 等数据类型,但目前我们只使用getString().

这似乎工作正常,所以我想知道为什么我应该使用getNString()而不是getString(). 如果getString()输入非 ASCII 字符会开始失败,还是 Oracle JDBC 驱动程序对我应该使用哪种方法漠不关心?

编辑:似乎它可能依赖于数据库:SQL Server 似乎并不介意您使用哪个,具体取决于连接参数。有人有关于 Oracle 的任何具体信息吗?

4

2 回答 2

10

getNString()我对我们的应用程序进行了测试,Java 6、JDBC 6、Oracle JDBC 6 驱动程序和 Oracle 11.1.0.6.0似乎没有必要。我使用的测试字符串是“Δ, Й, ק, ‎ م, ๗, あ, 叶, 叶, 和 말”,复制自http://en.wikipedia.org/wiki/Unicode

我们的大部分数据访问都是通过存储过程完成的。Java 能够通过setObject()and正确设置和检索上述测试字符串getString()(不是setString()出于抽象原因),从接口收集数据并按预期将其写回接口。

因此getString(),对于 Oracle 11g 的 Unicode 数据(如上面链接中的 SQL Server)可以正常工作,因此我们将继续使用它而不是getNString().

于 2011-06-22T07:48:12.863 回答
2

如果您的数据库使用NVARCHAR2数据类型,则它旨在存储多语言数据。如果任何 unicode 数据存储在这些列中,您的程序将中断。如果我是你,我会转向getNXXX()方法

于 2011-05-05T04:40:57.993 回答