0

我正在尝试在我的 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 问题。我应该如何解决这个问题?提前致谢!

4

1 回答 1

0

如果它是一个大块,我建议尝试通过流检索内容。通过使用getString,将分配一个大数组,也可能是二级缓存分配的一个大数组,甚至可以分配多个数组,而值是通过底层框架的不同层复制的值。所有这些字符串分配和复制都会导致高 CPU 使用率。

于 2013-01-16T22:54:00.337 回答