java 将 Clob 转换为字符串

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/34068148/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 22:26:29  来源:igfitidea点击:

Convert Clob to String

javastringclob

提问by Tony

How can I get String out of Clob. I did google it, but

我怎样才能从 Clob 中取出 String。我确实用谷歌搜索过,但是

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

is the only thing I get. Console says:

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

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)

java.sql.SQLException:在 ru.tenet.es09.dao.CompanyDAOImpl.get(CompanyDAOImpl.java:72) 处的 oracle.sql.CLOB.getSubString(CLOB.java:278) 处调用中的参数无效。 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)

It points on getSubString()method. What is wrong?

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

回答by PA001

Assuming you're using standard JDBC, once you have a ResultSetobject you should be able to call ResultSet#getString("clob_field_name")to retrieve your CLOB data.

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

回答by Raghu Kumar

I know I'm late to this party!. Here is the one liner i used from hibernate library. If hibernate is already integrated to project then we can use annotations to convert clob to java String. In my case i had custom result transformer which read data from multiple tables after costly join. In the resultSetTransformer the below line does the job.

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

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

回答by Daniel Correa

this my way (sorry my english)

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

        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();
        }

回答by Shine

Converting String to CLOB

将字符串转换为 CLOB

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

Convert Clob to String

将 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);
            }
    }

回答by Mohit Singh

I have created a java method which can create string from a CLOB object:

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

 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();

}

}