【问题标题】:Converting object to CLOB将对象转换为 CLOB
【发布时间】:2017-06-07 11:44:21
【问题描述】:

我有一个对象数组(它是 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) 解析为字符串。

【问题讨论】:

标签: java oracle


【解决方案1】:

如果 CLOB 的长度足够小 (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

【讨论】:

  • 我已经更新了我的查询。你现在可以检查一下吗?
  • @PeaceIsPearl 对不起,我看不出你还需要什么,除了你必须用((Clob)result[1])] 替换clob。我可以在我的答案中添加这个。
  • 感谢您编辑代码。但我需要 for 循环,因为我期待多个 id 和数据行。没关系,这不是问题。我尝试了以下事情 Clob data = (Clob) result[1];数据如下所示:clob2: STRINGDECODE('name ''pearl'' \n validations')。进一步搜索了 STRINGDECODE 函数,它就在那里,因为我在 clob 数据中有一个换行符。如果我删除换行符,我看到数据如下所示: clob2: ('name ''pearl'' validations') 我是试图让这个查询在 H2 数据库上运行。
【解决方案2】:

作为我的查询的解决方案,摆脱了本机查询并改用休眠模式。 用 javax.persistence.Lob 映射我的 CLOB 列

 @Lob
 @Column(name = "DATA")
 byte[] clobData

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 2011-02-11
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 2011-01-17
    • 2013-10-02
    相关资源
    最近更新 更多