以下情况: 我们的旧AS400 DB无法处理UTF8,因此我需要操作每个选择/插入/更新。我的第一个想法是:嘿,为什么不覆盖AS400JDBCPreparedStatement& AS400JDBCResultSet,我在其中处理set-和getString。听起来很简单,但不起作用(由于构造函数的可见性,甚至无法扩展类)。
有没有人知道如何创建一个简单的方法来操作resultset.getString(i)和preparedstatement.setString(1,string)方法并让它们运行我的方法manipulateStringBecauseThisDbIsSoOldAndUseless?
提前致谢!
@edit: 实际问题是,我们正在丢失像č这样的人物信息。我们的DB只能处理ISO-8859-1。
答案 0 :(得分:1)
尝试研究可能的JDBC驱动程序属性,以配置字符集向/从服务器发送/接收。
JDBC Properties可以在代码中设置set,如果在Java EE容器(例如Websphere)中运行,则可以附加到数据源配置。
我没有AS400经验,但这list of driver properties可能会有所帮助。特别提到
package ccsid
=指定用于SQL的字符编码 包和发送到服务器的任何语句。选择是:“1200”(UCS-2),“13488”(UTF-16)
另见What character conversion issues must my program deal with?
答案 1 :(得分:0)
连接连接= null; PreparedStatement preparedStatement = 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 {
}
答案 2 :(得分: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。