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

Java 我应该使用JDBC getNString()而不是getString()吗?,java,oracle,jdbc,nvarchar,Java,Oracle,Jdbc,Nvarchar,我们正在构建一个由Oracle数据库支持的Java应用程序,我们使用JDBC访问该数据库(driversojdbc6.jar和orai18n.jar)。数据库模式主要使用nvarhar2数据类型存储文本列 JDBCResultSet的说明是getNString()特别适用于NCHAR、NVARCHAR等数据类型,但目前我们只使用getString() 这似乎很好,所以我想知道为什么我应该使用getNString()而不是getString()。如果输入非ASCII字符,getString()是否

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

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

这似乎很好,所以我想知道为什么我应该使用
getNString()
而不是
getString()
。如果输入非ASCII字符,
getString()
是否将开始失败,或者Oracle JDBC驱动程序是否对我应该使用哪种方法漠不关心


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

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

我已经对我们的应用程序进行了测试,似乎
getNString()
对于Java 6、JDBC 6、Oracle JDBC 6驱动程序和Oracle 11.1.0.6.0是不必要的。我使用的测试管柱是“Δ,Й,ק,‎ م, ๗, あ, 叶, 葉, 及말", 抄袭自

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


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

我建议您将该测试添加到您的回归套件中,以防它在Oracle或Oracle的未来版本中发生更改Java@artbristol-这是一个非常好的主意。即使是Oracle配置的更改也可能导致回归(尽管我没有理由相信,除了Oracle配置的经验)这表明Java设计的API很糟糕。您无法在sql server中安装varchar列。因此没有全局解决方案。oracle Java驱动程序处理nvarchar-varchar转换,但mssql驱动程序不处理