0

以下情况:我们的旧 AS400 DB 无法处理 UTF8,因此我确实需要操作每个选择/插入/更新。我的第一个想法是:嘿,为什么不覆盖我处理 set- 和 getString 的 AS400JDBCPreparedStatement 和 AS400JDBCResultSet。听起来很简单,但不起作用(由于构造函数可见性,甚至无法扩展类)。

有谁知道如何创建一种简单的方法来操作 resultset.getString(i) 和preparedstatement.setString(1, string) 方法,并让它们通过我的方法来运行。

提前致谢!

@edit:实际的问题是,我们正在丢失像 č 这样的字符的信息。我们的数据库只能处理 ISO-8859-1。

4

3 回答 3

1

尝试研究可能的 JDBC 驱动程序属性以配置字符集以向服务器发送/接收。

JDBC 属性可以在代码中设置,如果在 Java EE 容器(例如 Websphere)中运行,则可以附加到数据源配置中。

我没有 AS400 经验,但这个驱动程序属性列表可能会有所帮助。它特别提到

package ccsid= 指定用于 SQL 包和发送到服务器的任何语句的字符编码。

选项有:“1200”(UCS-2)、“13488”(UTF-16)

另请参阅我的程序必须处理哪些字符转换问题?

于 2012-08-29T08:00:43.960 回答
0

连接连接 = null; PreparedStatementpreparedStatement = null; ResultSet generatedKeys = null;

try {
connection = m_Connection;
preparedStatement = (PreparedStatement) connection.prepareStatement(qString, Statement.RETURN_GENERATED_KEYS);

// ...

int affectedRows = preparedStatement.executeUpdate();
if (affectedRows == 0) {
    throw new SQLException("Creating user failed, no rows affected.");
}

generatedKeys = preparedStatement.getGeneratedKeys();
int id = -1;
if (generatedKeys.next()) {
    id = generatedKeys.getInt(1);
    id = -1;
} else {
    throw new SQLException("Creating user failed, no generated key obtained.");
}
} finally {

}
于 2012-08-29T06:30:58.307 回答
0

不知道你的“AS400”到底有多老,但 IBM i 平台已经支持 UTF8 有一段时间了。让 IBM 方面的人员创建一个测试表。假设他们使用的是 DDS(他们会知道这意味着什么),这里是 UTF8 和 UTF16:

 A            CHARUTF8      10A         COLHDG('UTF8') 
 A                                      CCSID(1208)    
 A                                      ALWNULL        
 A            CHARUTF16     10G         COLHDG('UTF16')
 A                                      CCSID(1200)    
 A                                      ALWNULL        

如果他们使用 SQL DDL 定义表,请让他们尝试 VARGRAPHIC CCSID 1208 用于 UTF-8 和 VARGRAPHIC CCSID 1200 用于 UTF-16。

于 2012-08-29T14:27:46.877 回答