gpt4 book ai didi

java - 无法将 CLOB 数据转换为字符串

转载 作者:行者123 更新时间:2023-12-01 11:26:02 26 4
gpt4 key购买 nike

我正在尝试使用 SubStringjava.sql.Clob 数据转换为 String 方法(与其他方法相比,此方法具有良好的性能)。 Clob 数据接近或超过 32MB。因为我的观察子字符串方法最多只能返回 33554342 字节。

如果 clob 数据超过 33554342 字节,那么它会抛出低于 sql 异常
ORA-24817: 无法为当前 lob 操作分配给定 block

编辑代码:

public static void main(String[] args) throws SQLException {

Main main = new Main();
Connection con = main.getConnection();
if (con == null) {
return;
}

PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT Table_ID,CLOB_FILE FROM TableName WHERE SOMECONDITION ";

String table_Id = null;
String directClobInStr = null;
CLOB clobObj = null;
String clobStr = null;
Object obj= null;
try {
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
table_Id = rs.getString( "Table_ID" ) ;
directClobInStr = rs.getString( "clob_FILE" ) ;
obj = rs.getObject( "CLOB_FILE");

clobObj = (CLOB) obj;
System.out.println("Table id " + table_Id);
System.out.println("directClobInStr " + directClobInStr);
clobStr = clobObj.getSubString(1L, (int)clobObj.length() );//33554342
System.out.println("clobDataStr = " + clobStr);
}
}
catch (SQLException e) {
e.printStackTrace();
return;
}
catch (Exception e) {
e.printStackTrace();
return;
}
finally {
try {
rs.close();
pstmt.close();
con.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

注意:- 这里 obj = rs.getObject("CLOB_FILE"); 有效,但我没想到会这样。因为我从某个地方获取 ResultSet 对象作为 Object.我必须转换并从 CLOB 获取数据

知道如何实现这一目标吗?

最佳答案

相反:

clobStr = clobObj.getSubString(1L, (int)clobObj.length() );

尝试如下:

int toread = (int) clobObj.length();
int read = 0;
final int block_size = 8*1024*1024;
StringBuilder str = new StringBuilder(toread);
while (toread > 0) {
int current_block = Math.min(toread, block_size);
str.append(clobObj.getSubString(read+1, current_block));
read += current_block;
toread -= current_block;
}
clobStr = str.toString();

它使用循环提取子字符串(每次迭代 8MB)。

但请记住,据我所知,Java 字符串的大小限制为 2 GB(这就是为什么 read 被声明为 int 而不是 long 的原因),而 Oracle CLOB 的大小限制为 128 TB。

关于java - 无法将 CLOB 数据转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com