Java 操纵setter&;PreparedStatement和ResultSet中的getter
以下情况: 我们的旧AS400 DB无法处理UTF8,因此我确实需要操纵每个select/insert/update。我的第一个想法是:嘿,为什么不重写AS400JDBCPreparedStatement&AS400JDBCResultSet,我在其中处理set-and-getString。听起来很简单,但不起作用(由于构造函数的可见性,甚至不能扩展类) 有人知道如何创建一种简单的方法来操作resultset.getString(i)和preparedstatement.setString(1,string)方法,并让它们通过我的方法ManufactureString运行,因为它们是bissoold和无用的吗 提前谢谢 @编辑: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,
实际问题是,我们正在丢失像č这样的字符的信息。我们的数据库只能处理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
。