我正在尝试从我的Java程序中读取Oracle 10g中的数据,其中一列是CLOB类型,如下所示(注意:数据是CLOB类型的列):
private final static String LOAD_QUERY
= "SELECT id, data FROM table WHERE id = ?";
public SomeObject loadById(long id){
SomeObject obj = null;
try {
obj = jdbcTemplate.queryForObject(LOAD_QUERY,
new ParameterizedRowMapper<SomeObject>() {
public Model mapRow(ResultSet rs, int rowNum) throws SQLException {
long id = rs.getLong("id");
String data = rs.getString("data");
return new SomeObject(id, data);
}
}, id);
} catch (Exception e) {
throw new SomeException("Error during SQL query", ErrorCode.INTERNAL_ERROR, e);
}
return obj;
}
存储在CLOB中的数据大小高达44Mb。我能够成功检索CLOB值,但它对cpu的使用是一个很大的打击。在使用Java VisualVM运行探查器之后,它似乎是一个IO问题。我该如何解决这个问题?提前谢谢!
答案 0 :(得分:0)
如果它是一个大的clob,我建议尝试通过流检索内容。 通过使用getString,将分配一个大型数组,也可能是由二级缓存分配的大型数组,甚至可以分配多个数组,而值是通过底层框架的不同层复制的值。 所有这些字符串分配和复制都会导致CPU使用率过高。