在Java中使用ResultSet.getNString或getString来获取代码视图。

我正在尝试获取带有结果集的java 代码视图(Oracle)。但是当我使用getStringorgetNString函数时,我只得到一串 32K 字符。视图的长度大于 100K 个字符。

我使用查询:

SELECT * FROM DBA_VIEWS

请帮忙。


梦里花落0921
浏览 113回答 3
3回答

肥皂起泡泡

使用 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);    }

慕妹3242003

请检查您的数据库和驱动程序版本。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 ProductionDriverVersion 12.1.0.2.0

慕少森

我用 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;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java