我用java连接到IBM DB2数据库,但数据在数据库中以二进制格式存储,所以当我获取任何值时,它都是二进制或十六进制格式。我如何在查询级别将其转换为UTF-8中的二进制数据。
提取数据的示例代码-
String sql = "SELECT poMast.ORDNO from AMFLIBL.POMAST AS poMast ";
Class.forName("com.ddtek.jdbc.db2.DB2Driver");
String url = "jdbc:datadirect:db2://hostname:port;DatabaseName=dbName;";
Connection con = DriverManager.getConnection(url, "username","password");
PreparedStatement preparedStatement = con.prepareStatement(sql);
ResultSet rs = preparedStatement.executeQuery();
System.out.println("ResultSet : \n");
System.out.println(" VNDNO");
while (rs.next())
{
System.out.println(rs.getString("ORDNO"));
}
3条答案
按热度按时间2ledvvac1#
您可能需要使用
CAST
表达式:根据需要调整VARCHAR的长度。字符串在数据库代码页中(现在通常是UTF-8),并在获取时转换为客户端/应用程序代码页。
6ovsh4lw2#
您可以将select的结果“转换”为utf8,如下所示。
源代码:cast db2
yshpjwxd3#
在我的例子中,错误的UTF-8数据不知何故进入了1208/UTF-8数据库的varchar中。在转换之前,当通过JDBC驱动程序查询此类数据时,数据库通过JDBC驱动程序返回-4220。通过添加以下属性,可以在JDBC驱动程序级别修复此问题:我的应用程序请参见:https://www.ibm.com/support/pages/sqlexception-message-caught-javaiocharconversionexception-and-errorcode-4220
Db2 LUW命令行处理器很久以前就将其修复为APAR,因此只有在未设置上述属性时,才能通过JDBC驱动程序看到此错误。
但是,如果您想修复数据库中的数据,可以使用以下方法:
1st db2将错误数据作为“任何内容”的二进制文件进行处理(转换),然后将其转换(转换)回有效的UTF-8。转换后,JDBC驱动程序显示相同的结果(无论是否设置特殊属性),并且不返回任何错误。