3 回答
TA贡献1829条经验 获得超6个赞
使用 Reader,延迟访问结果集。
try (Reader reader = rs.getNCharacterStream(...)) {
if (reader == null) {
return null;
}
StringWriter writer = new StringWriter();
reader.transferTo(writer);
return writer.toString();
}
try-with-resources 中允许使用 null reader。
transferTo自 java 10 以来就存在,这里有一个替代方案。
char[] buf = new buf[1024];
for (;;) {
int nread = reader.read(buf);
if (nread == -1) {
break;
}
writer.write(buf, 0, nread);
}
TA贡献1824条经验 获得超6个赞
请检查您的数据库和驱动程序版本。
getString适用于长度 > 32K 的 LONG 列
例子
SELECT TEXT_LENGTH FROM DBA_VIEWS where owner = 'SYS' and VIEW_NAME= 'DBA_STREAMS_COLUMNS';
TEXT_LENGTH
-----------
36331
这剪断了
def rs = stmt.executeQuery("SELECT TEXT FROM DBA_VIEWS where owner = 'SYS' and VIEW_NAME= 'DBA_STREAMS_COLUMNS'")
while(rs.next())
{
String txt = rs.getString(1)
println "got txt ${txt.take(10)}...${txt.reverse().take(10).reverse()}, size: ${txt.length()}"
}
回报
got txt select dis... ) = 0, size: 36331
使用过的版本
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
DriverVersion 12.1.0.2.0
TA贡献2019条经验 获得超9个赞
我用 ResultSet.getBinariToString 解决了,该函数采用 dba_views.text 的所有字符。感谢你所做的一切。
public String getBinaryToString(String columna){
try {
java.io.InputStream is = resultados.getBinaryStream(columna);
int intValueOfChar;
String targetString = "";
while ((intValueOfChar = is.read()) != -1) {
targetString += (char) intValueOfChar;
}
is.close();
return targetString;
} catch (SQLException | IOException ex) {
Logger.getLogger(Base.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
添加回答
举报