【问题标题】:Java + ResultSet.getObject()Java + ResultSet.getObject()
【发布时间】:2013-08-28 23:31:34
【问题描述】:

我们的产品有两个相同的设置。一种设置工作正常,但另一种设置遇到以下问题。

我们正在对数据库进行查询,查询类似于:

String query = select col1_name, col2_name, col3_name from table_1;
PreparedStatement l_statement = null;
Connection con = "<connection-string>";
l_statement = con.prepareStatement(query);
Resultset l_rs = l_statement.executeQuery();

现在 col1("column1") 数据类型是“SYS.XMLTYPE”,获取列数据的代码是:

Object obj = null;
obj = l_rs.getObject(1);
String xmlStr = null;
if(obj instanceof XMLTYPE){
  ...
} lse if (obj instanceof XMLTYPE){
  ...
} else if (obj instanceof java.sql.SQLXML){
   xmlStr = ((SQLXML)obj).getString ();
}

程序的控制权进入最后一个else if,即

xmlStr = ((SQLXML)obj).getString ();

现在,当我们检查 xmlStr 的值时,它包含以下垃圾字符:

Ÿcž(too many junk characters.)

在一个设置中,这段代码可以正常工作,而在另一个设置中,xml 字符串给出了垃圾字符,可能是什么原因?

【问题讨论】:

  • 显然有些不同 :-) 你验证过 DB 编码、服务器编码等吗?
  • 你能告诉我们你的设置有什么不同吗?
  • 如果两个相同的设置,尝试交换机器(工作机器上的错误设置,反之亦然)。 建议的原因:检查数据库是否损坏
  • 两个设置都指向同一个数据库。服务器编码在其中的作用是什么?它在两台服务器上都不存在。两种设置的唯一区别是,一种在 linux 上,另一种在 windows 上。
  • 独立服务器上的默认编码是什么?您是否尝试将服务器上的编码显式设置为数据库的编码?

标签: java xml jdbc


【解决方案1】:

您可能必须指定您期望的字符串编码。默认情况下,Windows 和 Linux 具有不同的默认编码,因此当您在一个平台上编组并在另一个平台上解组时,它们可能不兼容。理想情况下,应该确定编码,以便在两个平台之间使用一致的编码。

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多