使用 ResultSet.getNString 或 getString 在 Java 中获取代码视图。 return 不是来自 DBA_VIEWS.text 的完整字符串
To get the code view in Java with ResultSet.getNString or getString. Does not return the complete string from DBA_VIEWS.text
我正在尝试在 java 中使用结果集获取代码视图 (Oracle)。但是当我使用 getString
或 getNString
函数时,我只得到一个 32K 字符的链。
视图的长度大于 100K 个字符。
我使用查询:
SELECT * FROM DBA_VIEWS
请帮忙。
使用延迟访问结果集的 Reader。
try (Reader reader = rs.getNCharacterStream(...)) {
if (reader == null) {
return null;
}
StringWriter writer = new StringWriter();
reader.transferTo(writer);
return writer.toString();
}
try-with-resources 中允许空 reader。
由于 transferTo
自 java 10 以来就存在,这里有一个替代方案。
char[] buf = new buf[1024];
for (;;) {
int nread = reader.read(buf);
if (nread == -1) {
break;
}
writer.write(buf, 0, nread);
}
请检查您的数据库和驱动程序版本。
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()}"
}
returns
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
我用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;
}
我正在尝试在 java 中使用结果集获取代码视图 (Oracle)。但是当我使用 getString
或 getNString
函数时,我只得到一个 32K 字符的链。
视图的长度大于 100K 个字符。
我使用查询:
SELECT * FROM DBA_VIEWS
请帮忙。
使用延迟访问结果集的 Reader。
try (Reader reader = rs.getNCharacterStream(...)) {
if (reader == null) {
return null;
}
StringWriter writer = new StringWriter();
reader.transferTo(writer);
return writer.toString();
}
try-with-resources 中允许空 reader。
由于 transferTo
自 java 10 以来就存在,这里有一个替代方案。
char[] buf = new buf[1024];
for (;;) {
int nread = reader.read(buf);
if (nread == -1) {
break;
}
writer.write(buf, 0, nread);
}
请检查您的数据库和驱动程序版本。
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()}"
}
returns
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
我用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;
}