MySQL结果集Java_java – 使用MySQL传输大型结果集

我正在开发一个使用大型MySQL表的spring应用程序。当加载大表时,我得到一个OutOfMemoryException,因为驱动程序尝试将整个表加载到应用程序内存中。

我试过使用

statement.setFetchSize(Integer.MIN_VALUE);

但随后每个ResultSet我打开挂在close();看上去我发现,这是因为它尝试加载任何未读的行,然后关闭ResultSet,但是不是这样,因为我这样做:

ResultSet existingRecords = getTableData(tablename);

try {

while (existingRecords.next()) {

// ...

}

} finally {

existingRecords.close(); // this line is hanging, and there was no exception in the try clause

}

挂起发生在小表(3行),如果我不关闭RecordSet(发生在一个方法),然后connection.close()挂起。

堆栈跟踪挂起:

SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method]

SocketInputStream.read(byte[], int, int) line: 129

ReadAheadInputStream.fill(int) line: 113

ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(byte[], int, int) line: 160

ReadAheadInputStream.read(byte[], int, int) line: 188

MysqlIO.readFully(InputStream, byte[], int, int) line: 2428

MysqlIO.reuseAndReadPacket(Buffer, int) line: 2882

MysqlIO.reuseAndReadPacket(Buffer) line: 2871

MysqlIO.checkErrorPacket(int) line: 3414

MysqlIO.checkErrorPacket() line: 910

MysqlIO.nextRow(Field[], int, boolean, int, boolean, boolean, boolean, Buffer) line: 1405

RowDataDynamic.nextRecord() line: 413

RowDataDynamic.next() line: 392

RowDataDynamic.close() line: 170

JDBC4ResultSet(ResultSetImpl).realClose(boolean) line: 7473

JDBC4ResultSet(ResultSetImpl).close() line: 881

DelegatingResultSet.close() line: 152

DelegatingResultSet.close() line: 152

DelegatingPreparedStatement(DelegatingStatement).close() line: 163

(This is my class) Database.close() line: 84

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值