查看其他博客说是:这应该算是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