将对象转换为CLOB

时间:2017-06-07 11:44:21

标签: java oracle

我有一个对象数组(它是Oracle数据库中本机查询的输出),其中第一个元素是CLOB数据类型,需要转换为java String对象。我怎么做到这一点?请帮忙。

 String sql = "select id, data from mytable";
            List< Object[] > results = getEntityManager().createNativeQuery(sql).getResultList();
Map< Long, String > map = new HashMap<>();
        for (Object[] result : results) {
            map.put(((Number) result[0]).longValue(), (String) result[1]);
        }

data是mydata表中具有CLOB数据类型的列。 result(1)将拥有我的CLOB数据

在放入HashMap时,我需要将结果(1)解析为String。

2 个答案:

答案 0 :(得分:0)

如果CLOB的长度足够小(&lt; Integer.MAX_VALUE),您可以执行以下操作:

clob.getSubString(1, (int) clob.length());

(只需查看this question

编辑:

您在问题中提交的代码应该成为:

String sql = "select id, data from mytable";
List< Object[] > results = getEntityManager().createNativeQuery(sql).getResultList();
Map< Long, String > map = new HashMap<>();
Clob clob = (Clob)result[1];
String value = clob.getSubString(1, (int) clob.length());
map.put(((Number) result[0]).longValue(), value);

请注意原始代码中的循环绝对没用,所以我将其删除了。

另请注意result[1]java.sql.Clob

答案 1 :(得分:0)

作为我查询的解决方案,摆脱了原生查询并改为使用了hibernate。 使用javax.persistence.Lob

映射我的CLOB列
 @Lob
 @Column(name = "DATA")
 byte[] clobData