为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2023-08-04 18:57:23
我正在尝试获取带有结果集的java 代码视图(Oracle)。但是当我使用getStringorgetNString函数时,我只得到一串 32K 字符。视图的长度大于 100K 个字符。我使用查询:SELECT * FROM DBA_VIEWS请帮忙。
查看完整描述

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);

    }


查看完整回答
反对 回复 2023-08-04
?
慕妹3242003

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


查看完整回答
反对 回复 2023-08-04
?
慕少森

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;

}


查看完整回答
反对 回复 2023-08-04
  • 3 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信