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

Gna*_*nat 12 java oracle nvarchar jdbc

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

JDBC文档的JDBC ResultSet说,getNString()尤其用于与NCHAR,NVARCHAR等数据类型使用,但目前我们只使用getString().

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

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

Gna*_*nat 7

我已经对我们的应用程序进行了测试,似乎这getNString()对Java 6,JDBC 6,Oracle JDBC 6驱动程序和Oracle 11.1.0.6.0 来说是不必要的.我使用的测试字符串是"Δ,Й,ק,م,7,あ,叶,叶和말",复制自http://en.wikipedia.org/wiki/Unicode.

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

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

  • 我建议您将该测试添加到回归套件中,以防它在未来的Oracle或Java版本中发生变化 (2认同)