Oracle JDBC 读取 LONG 字段,报“流已被关闭”

Oracle JDBC在读取LONG字段时可能出现'流已被关闭'的错误。为解决此问题,建议首先读取LONG字段,再读取其他字段。若数据多行,需先获取所有行的LONG字段,然后回滚到第一行读取剩余数据。示例代码展示了使用不同ResultSet类型进行操作的方法。注意在异常情况下,ResultSet的beforeFirst()操作可能无效。
摘要由CSDN通过智能技术生成

查看其他博客说是:这应该算是Oracle的bug,为了弥补这个问题,Oracle给我们的建议是:在结果集处理时,要先把LONG字段读取掉,再去读其他字段。

意思是:我们必须第一个获取long字段的数据,再获取其他类型字段的数据,

如果数据有多行:

第一行:第一个获取long类型字段再获取其他类型字段,第二行:第一个获取long类型字段再获取其他类型字段

这种方式也不行,因为在第二行,获取long类型字段时前面获取的是其他类型的字段

所以我们只能先获取所有行的long类型字段,然后ResultSet.beforeFirst()回到第一行,在获取其他类型字段数据。

最后把两部分数据合并。

示例:

ResultSetMetaData data = rs.getMetaData();
//首先获取到long类型字段所在位置
List<Integer> longIndex = new ArrayList<Integer> ;
for(int i = 0; i < data.getColumnCount(); i++){
    String columnTypeName = data.getColumnTypeName(i);
	if(columnTypeName.equalsTgnoreCase("LONG")){
	    lo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值