将 Clob 转换为字符串

Convert Clob to String

如何从 Clob 中获取字符串。我做到了 google,但是

myClob.getSubString(0, (int) info.length()));

是我唯一得到的。控制台显示:

java.sql.SQLException: Invalid argument(s) in call at oracle.sql.CLOB.getSubString(CLOB.java:278) at ru.tenet.es09.dao.CompanyDAOImpl.get(CompanyDAOImpl.java:72) at ru.tenet.es09.dao.CompanyDAOImpl.getList(CompanyDAOImpl.java:132) at ru.tenet.es09.dao.AddressDAOImpl.getList(AddressDAOImpl.java:59) at ru.tenet.es09.Test.main(Test.java:11)

指向getSubString()方法。怎么了?

假设您使用的是标准 JDBC,一旦您拥有 ResultSet 对象,您应该能够调用 ResultSet#getString("clob_field_name") 来检索您的 CLOB 数据。

这是我的方式(对不起我的英语)

        res = ps.executeQuery();
        try {
            while (res.next()) {
                System.out.println(res.getClob(1));//confirm data
                sRet = res.getString(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            ps.close();
        }

将字符串转换为 CLOB

SOobject.setLongStringField( new SerialClob(entityString.toCharArray()));//Converting String to CLOB

将 Clob 转换为字符串

public String getLongStringField() {
         Reader reader = null;
            BufferedReader bufferedReader = null;
            try {
                reader = longStringField.getCharacterStream();
                bufferedReader = new BufferedReader(reader);
                return IOUtils.toString(bufferedReader);

            } catch (Exception e) {

                throw new RuntimeException("Error while reading String from CLOB", e);
            } finally {
                IOUtils.closeQuietly(reader);
                IOUtils.closeQuietly(bufferedReader);
            }
    }

我创建了一个 java 方法,它可以从 CLOB 对象创建字符串:

 public String clobToString(Clob data) {
     StringBuilder sb = new StringBuilder();
        try {
            Reader reader = data.getCharacterStream();
            BufferedReader br = new BufferedReader(reader);

            String line;
            while(null != (line = br.readLine())) {
                sb.append(line);
            }
            br.close();
        } catch (SQLException e) {
            // handle this exception
        } catch (IOException e) {
            // handle this exception
        }
        return sb.toString();

}

我知道我来晚了!这是我从休眠库中使用的一个衬垫。如果 hibernate 已经集成到项目中,那么我们可以使用注释将 clob 转换为 java 字符串。在我的例子中,我有自定义结果转换器,它在昂贵的连接后从多个表中读取数据。在 resultSetTransformer 中,下面的行完成了这项工作。

ClobType.INSTANCE.toString((Clob) tuple[2])
// org.hibernate.type.ClobType