setString在PreparedStatement(Oracle 12)中不支持国家字符

时间:2019-07-07 06:17:52

标签: java spring internationalization prepared-statement oracle12c

我们将Oracle版本12.1.0.2.0与ojdbc7-1.0.jar和JDK 8一起使用。

如果相关且使用oracle.jdbc.driver.OracleDriver,我们将Hikari用作连接池

这是在Oracle中使用的recommended driver

  

符合Oracle数据库版本JDBC规范

     

带有JDK 7和JDK 8的12.1或12cR1 ojdbc7.jar

在Spring应用程序中,我们使用PreparedStatement,并且我们希望将国家字符作为字符来支持。

我们使用setNString处理新查询/更新查询

  

将指定的参数设置为给定的String对象。驱动程序在将其发送到数据库时,将其转换为SQL NCHAR或NVARCHAR或LONGNVARCHAR值(取决于参数的大小,相对于驱动程序对NVARCHAR值的限制)。

我们可以使用setString而不更改代码来为现有代码添加支持(平台/配置级别)吗?

try (PreparedStatement ps = conn.prepareStatement(SQL_STATEMENT)) {
        ps.setString(1, THAI_TEXT);
}

尽管列定义为setString,但目前NVARCHAR2(50)不处理国家字符(另存为?)

是否必须将所有setString替换为setNString

或者是否存在可以使用setString添加国家支持的标志/属性/升级/修复?

1 个答案:

答案 0 :(得分:1)

您可能不愿意使用oracle.jdbc.defaultNChar=true,请参阅JDBC Guide中的19.2(但是我发现Oracle和JDBC API在这方面非常令人困惑,它应该与setString一起使用)