我应该使用JDBC getNString()而不是getString()吗?

时间:2011-05-05 03:00:34

标签: java oracle jdbc nvarchar

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

JDBC ResultSet的{​​{3}}表示getNString()特别适用于NCHAR,NVARCHAR等数据类型,但目前我们只使用{{1} }}

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

编辑:似乎它可能依赖于数据库:JDBC documentation,具体取决于连接参数。有没有人有关于Oracle的任何具体信息?

2 个答案:

答案 0 :(得分:7)

我已对我们的应用程序进行了测试,似乎{6}不需要getNString() Java 6,JDBC 6,Oracle JDBC 6驱动程序和Oracle 11.1.0.6.0。我使用的测试字符串是从“{3}}复制的”Δ,Й,ק,م,7,あ,叶,叶和말“。

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

因此getString()适用于Oracle 11g的Unicode数据(如上面链接中的SQL Server),因此我们将继续使用此而不是getNString()

答案 1 :(得分:2)

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