我有一个对象数组(它是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。
答案 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