如何从Clob中获取String。我确实谷歌了,但是
myClob.getSubString(0, (int) info.length()));
是我唯一得到的。控制台说:
java.sql.SQLException:调用时的参数无效 oracle.sql.CLOB.getSubString(CLOB.java:278)at ru.tenet.es09.dao.CompanyDAOImpl.get(CompanyDAOImpl.java:72)at at ru.tenet.es09.dao.CompanyDAOImpl.getList(CompanyDAOImpl.java:132)at at ru.tenet.es09.dao.AddressDAOImpl.getList(AddressDAOImpl.java:59)at at ru.tenet.es09.Test.main(Test.java:11)
它指向getSubString()
方法。有什么问题?
答案 0 :(得分:3)
假设您正在使用标准JDBC,一旦拥有ResultSet
对象,您应该能够调用ResultSet#getString("clob_field_name")
来检索CLOB数据。
答案 1 :(得分:1)
我知道我参加这个聚会迟到了!这是我从休眠库中使用的一个内衬。如果hibernate已经集成到项目中,则可以使用批注将clob转换为java String。就我而言,我有一个自定义结果转换器,该转换器在进行昂贵的连接后从多个表中读取数据。在resultSetTransformer中,以下行完成了该工作。
ClobType.INSTANCE.toString((Clob) tuple[2])
// org.hibernate.type.ClobType
答案 2 :(得分:0)
这是我的方式(对不起我的英语)
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();
}
答案 3 :(得分:0)
将字符串转换为CLOB
SOobject.setLongStringField( new SerialClob(entityString.toCharArray()));//Converting String to CLOB
将Clob转换为String
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);
}
}
答案 4 :(得分:0)
使用此:
> public String clob2String(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(); }