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
Convert Clob to String
提问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 ResultSet
object 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();
}
}