Java 操纵setter&;PreparedStatement和ResultSet中的getter

Java 操纵setter&;PreparedStatement和ResultSet中的getter,java,prepared-statement,ibm-midrange,resultset,Java,Prepared Statement,Ibm Midrange,Resultset,以下情况: 我们的旧AS400 DB无法处理UTF8,因此我确实需要操纵每个select/insert/update。我的第一个想法是:嘿,为什么不重写AS400JDBCPreparedStatement&AS400JDBCResultSet,我在其中处理set-and-getString。听起来很简单,但不起作用(由于构造函数的可见性,甚至不能扩展类) 有人知道如何创建一种简单的方法来操作resultset.getString(i)和preparedstatement.setString(1,

以下情况: 我们的旧AS400 DB无法处理UTF8,因此我确实需要操纵每个select/insert/update。我的第一个想法是:嘿,为什么不重写AS400JDBCPreparedStatement&AS400JDBCResultSet,我在其中处理set-and-getString。听起来很简单,但不起作用(由于构造函数的可见性,甚至不能扩展类)

有人知道如何创建一种简单的方法来操作resultset.getString(i)和preparedstatement.setString(1,string)方法,并让它们通过我的方法ManufactureString运行,因为它们是bissoold和无用的吗

提前谢谢

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

连接=空;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 {

}

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

可以从代码中设置,如果在JavaEE容器(例如Websphere)中运行,则可以附加到数据源配置中

我没有AS400的经验,但这可能会有所帮助。它特别提到

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

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


另请参见

我不知道您的“AS400”到底有多老,但IBMi平台已经支持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

我没有任何有用的代码。我只能提供字符串操作(或多或少只有一个替换)如果您尝试在DB上使用现有的rs.getString()会发生什么?我建议您阅读JDBC驱动程序文档以获取可以设置的属性。它不应该是你必须编写的东西。服务器运行的是什么版本,出于好奇,是什么型号?要获取型号,请使用
DSPSYSVAL QMODEL
命令。查看操作系统版本的一种方法是
DSPOBJD QSYS/QSYS*LIB DETAIL(*SERVICE)
,并查看“服务级别”,它应该类似于
V5R4M0