为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: 8.1
【操作系统】:window 2012 server
【CPU】: 至强CPU
【问题描述】*:参考官方文档,用Java Jdbc读取Text字段,但返回dm.jdbc.driver.DmdbNClob@63c9982e。代码如下:
private static void testLongvarchar() {
// longvarchar字段
String sql = "select A0190 from A01 where ( PersonId = '571496538a97110b4cf1b995' )";
DbContext.getJdbcTemplate().query(sql, new ResultSetExtractor() {
@Override
public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
if (rs.next()) {
Clob clob = rs.getClob("A0190");
try {
String str = IOUtils.toString(clob.getCharacterStream());
System.out.println("class=" + clob.getClass() + ", value=" + str);
}
catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
});
}
打印结果为:class=class dm.jdbc.driver.DmdbNClob, value=dm.jdbc.driver.DmdbNClob@63c9982e
找到原因了:Text字段里保存的值就是"dm.jdbc.driver.DmdbNClob@63c9982e",是被一个同事误写入的。
经过测试,发现以下规律:
longvarchar: getString, getObject都是字符串;
Text: getString是字符串,getObject是Clob对象;
打扰各位了,非常不好意思!