将 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
如何从 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