【发布时间】:2016-07-01 09:19:07
【问题描述】:
我收到“com.microsoft.sqlserver.jdbc.SQLServerException:SQL Server 返回不完整的响应。连接已关闭。”在 Java 应用程序中对 Azure SQL 数据库执行连续 SQL 查询时出现异常。在 Azure SQL 数据库上执行的 SQL 查询正在获取大量数据。在获取数据时,我们对每一行进行一些操作,因此执行需要很长时间。我明白了执行SQL查询一定时间后异常(时间段不一致)。SQL服务器版本为12.0.2000.8。
以前有人经历过这种行为吗?
代码片段
sourceDbConnection = SourceDBConnector().getConnection();
stmt = createStmt(sourceDbConnection);
resultSet = stmt.executeQuery(sql query);
while (resultSet.next()) {
// .. Do some operation.
}
SQL 查询
SELECT coalesce(rfr.UniqueID,rs.UniqueID) as PGUID, rs.resultname, rs.ResultId, rs.modifieddatetime FROM tblResult rs
JOIN tblResultOrg org ON org.CustomerId = rs.CustomerId
LEFT OUTER JOIN tblResultFormRef rfr ON rfr.UniqueID = rs.UniqueID
WHERE org.ORGID IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25) AND NOT EXISTS (SELECT NULL FROM tblSynchedResult srs WHERE srs.ResultId=rs.ResultId) AND rs.Status=1
ORDER BY rs.modifieddatetime
例外:
com.microsoft.sqlserver.jdbc.SQLServerException: SQL Server returned an incomplete response. The connection has been closed.
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1352) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1339) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:3740) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:3687) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:3663) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:3979) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.TDSReader.readWrappedBytes(IOBuffer.java:4001) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.TDSReader.readLong(IOBuffer.java:3971) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.PLPInputStream.makeStream(PLPInputStream.java:73) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.PLPInputStream.makeTempStream(PLPInputStream.java:59) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.PLPInputStream.isNull(PLPInputStream.java:45) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValuePrep(dtv.java:2345) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.ServerDTVImpl.getValue(dtv.java:2408) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.DTV.getValue(dtv.java:176) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.Column.getValue(Column.java:113) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1981) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getValue(SQLServerResultSet.java:1966) ~[sqljdbc4-3.0.0.jar:na]
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getString(SQLServerResultSet.java:2291) ~[sqljdbc4-3.0.0.jar:na]
at org.apache.commons.dbcp2.DelegatingResultSet.getString(DelegatingResultSet.java:199) ~[commons-dbcp2-2.1.1.jar:2.1.1]
at org.apache.commons.dbcp2.DelegatingResultSet.getString(DelegatingResultSet.java:199) ~[commons-dbcp2-2.1.1.jar:2.1.1]
at com.mso.service.etl.job.prepared.EtlPreparedJob.handleFormsHavingNoRecordings(EtlPreparedJob.java:236) ~[classes/:na]
at com.mso.service.etl.job.prepared.EtlPreparedJob.execute(EtlPreparedJob.java:180) ~[classes/:na]
at com.mso.service.etl.job.prepared.EtlPreparedJob.run(EtlPreparedJob.java:105) ~[classes/:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_85]
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_85]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_85]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_85]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_85]
【问题讨论】:
标签: java azure jdbc sql-server-2012 database-connection