【发布时间】:2019-07-07 06:17:52
【问题描述】:
我们使用 Oracle 版本 12.1.0.2.0 和 ojdbc7-1.0.jar 和 JDK 8。
我们使用 Hikari 作为连接池,如果它是相关的并且它正在使用 oracle.jdbc.driver.OracleDriver
这是在 oracle 中使用的recommended driver
Oracle 数据库版本 JDBC 规范合规性
12.1 或 12cR1 ojdbc7.jar 与 JDK 7 和 JDK 8
在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)
我们必须用setNString替换所有setString吗?
或者是否有可以使用setString添加国家支持的标志/属性/升级/修复?
【问题讨论】:
-
哪个数据库和驱动程序?你真的测试过吗?假设列已正确定义,我希望大多数驱动程序能够透明地处理此问题。
-
@MarkRotteveel 我们正在使用带有 ojdbc7.jar 的 Oracle 12。目前它只适用于
setNString -
@MarkRotteveel 在使用驱动程序
oracle.jdbc.driver.OracleDriver而不是oracle.jdbc.OracleDriver时可能会出现问题? -
您应该使用
oracle.jdbc.OracleDriver,但它不应该有所作为。此外,ojdbc7.jar 不是驱动程序的版本,它只是指定它针对的 Java 版本(Java 7)。
标签: java spring internationalization prepared-statement oracle12c