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

2022-09-03 15:16:47

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

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

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

编辑:似乎它可能依赖于数据库:SQL Server似乎不介意你使用哪个,这取决于连接参数。有没有人对甲骨文有任何具体的信息?


答案 1

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

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

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


答案 2

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


推荐