Java “我如何解决?”;“套接字读取超时”;迭代结果集时发生异常?
使用Spring的rs.next()方法迭代结果集时,面临java.sql.SQLException:Io异常:套接字读取超时的原因是什么 编辑:我使用org.springframework.jdbc.core.ResultSetExtractor.extractData(ResultSet),同时使用rs.next方法在结果集中循环 Ps:我使用Tomcat6、java1.7和ojdbc14 以下是stacktrace:Java “我如何解决?”;“套接字读取超时”;迭代结果集时发生异常?,java,sockets,tomcat,jdbc,ojdbc,Java,Sockets,Tomcat,Jdbc,Ojdbc,使用Spring的rs.next()方法迭代结果集时,面临java.sql.SQLException:Io异常:套接字读取超时的原因是什么 编辑:我使用org.springframework.jdbc.core.ResultSetExtractor.extractData(ResultSet),同时使用rs.next方法在结果集中循环 Ps:我使用Tomcat6、java1.7和ojdbc14 以下是stacktrace: Caused by: java.sql.SQLException: Io
Caused by: java.sql.SQLException: Io exception: Socket read timed out
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:1043)
at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:297)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:213)
at com.company.project.db.sp.mySP.extractData(mySP.java:188)
at org.springframework.jdbc.core.JdbcTemplate.processResultSet(JdbcTemplate.java:1214)
at org.springframework.jdbc.core.JdbcTemplate.extractOutputParameters(JdbcTemplate.java:1165)
at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1076)
at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1014)
编辑2:这是我的代码:
public class mySpClass extends StoredProcedure implements ResultSetExtractor<Object> {
private final String SQL = "pack.mySp";
private static Log logger = LogFactory.getLog(mySpClass.class);
public mySpClass(DataSource ds){
this.setDataSource(ds);
this.setSql(SQL);
// declare all parameters,cursors like this.declareParameter(new SqlParameter("P_START_TIMESTAMP", Types.TIMESTAMP));
this.compile();
}
public mySpClassSPResult runIt(//Here inputParams) throws SQLException {
//business code and input
try {
spOut = execute(inputParams);
} catch (DataAccessException dataAccessException) {
logger.error("SP execution throwed an exception",dataAccessException);
throw dataAccessException;
}
Map<String,myReturnObject> returnObjects=(Map<String, myReturnObject>) spOut.get("P_RC_ReturnObjects");
return new mySpClassSPResult(returnObjects);
}
@Override
public Object extractData(ResultSet rs) throws SQLException, DataAccessException {
Map<String,myReturnObject> returnObjects=new HashMap<String,myReturnObject>();
while(rs.next()){ // here is where time out exception occurs
//business code fills returnObjects
}
return returnObjects;
}
公共类mySpClass扩展StoredProcess实现ResultTextRactor{
私有最终字符串SQL=“pack.mySp”;
私有静态日志记录器=LogFactory.getLog(mySpClass.class);
公共mySpClass(数据源ds){
这个.setDataSource(ds);
这个.setSql(SQL);
//声明所有参数,游标如下。declareParameter(新的SqlParameter(“P_START_TIMESTAMP”,Types.TIMESTAMP));
this.compile();
}
public mySpClassSPResult runIt(//此处为inputParams)引发SQLException{
//业务代码和输入
试试{
喷动=执行(输入参数);
}捕获(DataAccessException DataAccessException){
logger.error(“SP执行引发异常”,dataAccessException);
抛出dataAccessException;
}
Map returnObjects=(Map)spOut.get(“P_RC_returnObjects”);
返回新的mySpClassSPResult(返回对象);
}
@凌驾
公共对象提取数据(ResultSet rs)引发SQLException、DataAccessException{
Map returnObjects=new HashMap();
while(rs.next()){//这里是发生超时异常的地方
//业务代码填充返回对象
}
归还物品;
}
}您的Oracle数据库似乎停止运行。预期结果集有多大?如果结果太大,请尝试分页。@Fildor事实上,对于9行结果,这是可以的,但是对于10行,我面临这个例外。好的,那么它是def。不是尺寸…每行有长时间的钙化/手术吗?还是待会再收集和处理?@Jan,不,我没有。只是在结果集中循环。请看编辑。我有T4C连接,在循环过程中超时。