`

java.sql.SQLException: 结果集已耗尽

    博客分类:
  • Java
阅读更多
2013年10月21日 星期一 21时43分23秒

说明:  继上次的java.sql.SQLException: ORA-01013: user requested cancel of current operation 错误。查了两天也没查出具体原因。后在同事的建议下,延长查询时间。因为生产库不能随意重启,
        于是就写了个testQuery.jsp测试页面来测试生产环境中延长脚本查询时间是否可以完全生成文件并导出:

            <%@page import="com.poson.cb.lib.DBConn"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@page import="org.apache.poi.hssf.usermodel.HSSFRichTextString"%>
<%@page import="java.io.FileOutputStream"%>
<%@page import="java.io.File"%>
<%@page import="java.io.PrintWriter"%>
<%@page import="com.poson.cb.lib.CBConfig2"%>
<%@page import="javax.servlet.jsp.tagext.TryCatchFinally"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.text.SimpleDateFormat"%><META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
<%@ page contentType="text/html; charset=GBK" language="java"%>
<%@ page import="java.util.*" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>移动客户出账全量稽核</title>
<style type="text/css">
        .table-b table td
        {
                border:0px solid #F00;
                font-size:smaller
        }
        .table-c table
        {
                border-right:1px solid #F00;border-bottom:1px solid #F00
        }
        .STYLE2 {font-size: 12px}
        td
        {
                font-size: 13px
        }
</style>
</head>
<script type="text/javascript">
               
</script>
<%
        System.out.println("页面测试开始......");
        String sql1="select count(0) from file_reg_mobile  where  bil_billing_cycle_id = 201309 and billing_flag = 'S' and file_name like 'LIST%' ";
        String sql2=" select  p.province_name,m.file_name, t.error_code from tl_error_record_201309 t " +
                                  "left join file_reg_ext_mobile f  on t.batch_id = f.serial left join province p " +
                                    "on f.province_use = p.prov_code left join file_reg_mobile m   on m.serial = t.batch_id " +
                                  "group by  p.province_name,m.file_name, t.error_code";
       
        DBConn con=new DBConn();
        Statement statement1=null,statement2=null;
        ResultSet set1=null,set2=null;
        String filepath="";
        int rowCount1=0;
        try{
                statement1=con.getConn().createStatement();
                //延长脚本执行时间
                statement1.setQueryTimeout(1000*60*2);   
                set1= statement1.executeQuery(sql1);
                while(set1.next()){
                        rowCount1=set1.getInt(1);
                }
        }catch(SQLException e){
                System.out.println("脚本1执行错误!"+e);
               
        }finally{
                set1.close();
                statement1.close();
        }
       
        try{
                statement2=con.getConn().createStatement();
                //设置查询时间
                statement2.setQueryTimeout(1000*60*2);
                System.out.println("查询开始时间:"+new SimpleDateFormat("yyyy-mm-dd hh24:mm:ss").format(new Date()));
                set2= statement2.executeQuery(sql2);
                System.out.println("查询结束时间:"+new SimpleDateFormat("yyyy-mm-dd hh24:mm:ss").format(new Date()));
                HSSFWorkbook wb=new HSSFWorkbook();
                HSSFSheet sheet1=wb.createSheet("测试");
                while(set2.next()){
                        HSSFRow row= sheet1.createRow(sheet1.getLastRowNum()+1);
                        row.createCell((short)0).setCellValue(new HSSFRichTextString(set2.getString(1)));
                        row.createCell((short)1).setCellValue(new HSSFRichTextString(set2.getString(2)));
                        row.createCell((short)2).setCellValue(new HSSFRichTextString(set2.getString(3)));
                }
                filepath=System.getProperty("user.home")+File.separator+"web"+File.separator+"CB"+File.separator+"test.xls";
                FileOutputStream file=new FileOutputStream(new File(filepath));
                wb.write(file);
                System.out.println("写完Excel时间:"+new SimpleDateFormat("yyyy-mm-dd hh24:mm:ss").format(new Date()));
        }catch(SQLException e){
                System.out.println("脚本2执行错误!"+e);
        }finally{
                set2.close();
                statement2.close();
        }
        System.out.println("下载访问路径:"+"http://localhost:7001"+filepath);
%>


<body  border="0" bordercolor="#000000" style="border-collapse:collapse;">
        <form method="post" name="form1">
                <table  width="100%" border="1">
                        <tr>
                                <td>set1的记录数为:</td>
                                <td><%= rowCount1%></td>
                        </tr>
                        <tr>
                                <td></td>
                                <td><a href="<%="http://localhost:7001"+filepath%>">点击下载</a> </td>                        </tr>
                </table>
        </form>
</body>
</html> 

页面测试开始......
查询开始时间:2013-27-21 1124:27:05
查询结束时间:2013-27-21 1124:27:24
写完Excel时间:2013-27-21 1124:27:24
下载访问路径:http://localhost:7001/CTCB/web/CB/test.xls


测试结果发现:第二个查询结果最长也才用了20s而已。而我登陆生产环境(晚上)测试,完全没问题。问题应该是白天资源忙加上网络速度慢导致无法将生成的文件导出。




==================================================================================================
刚开始界面报如下错误:
<2013-10-21 下午09时41分51秒 GMT+08:00> <Error> <HTTP> <BEA-101017> <[ServletContext(id=1106085697,name=CB,context-path=/CB)] Root cause of ServletException.
java.sql.SQLException: 结果集已耗尽
        at weblogic.jdbc.wrapper.ResultSet.getInt(ResultSet.java:278)
        at jsp_servlet.__testqery._jspService(__testqery.java:197)
        at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at com.poson.cb.util.comface.EncodingFilter.doFilter(EncodingFilter.java:164)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7053)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
       
        上面是修改的代码,造成这个错误的原因是出现此错误 是因为,执行的数据库查询没有查询到任何结果,却调用了rs.next() 或者,游标到了查询出来的最后一条记录,又调用了rs.next()则,会找不到next条记录
        ResultSet set1=statement.executeQuery(sql1);
      ResultSet set2=statement.executeQuery(sql2);

 





                    2013-10-22 0:41 记@sanliheludongkou.xichengqu.beijing



0
4
分享到:
评论
2 楼 listen-raining 2013-10-22  
须等待 写道
。。。

while(rs.hasNext()) {
    rs.next();
}

你那个写法本身就不对


恩  这种写法确实是错误的。
1 楼 须等待 2013-10-22  
。。。

while(rs.hasNext()) {
    rs.next();
}

你那个写法本身就不对

相关推荐

    java中常见的错误.docx

    8. 结果集已关闭:`java.sql.SQLException: Operation not allowed after ResultSet closed`提示在结果集关闭后尝试访问数据,确保在适当的时间点关闭并处理结果集。 9. 类型错误:`Data truncated for column '...

    解决Java_heap_space问题

    ### 解决Java_heap_space问题:深入理解与策略 在Java应用程序开发与运行过程中,经常会遇到一个常见的内存管理问题——“Java heap space”。这个问题通常表现为Java虚拟机(JVM)在执行过程中因可用堆内存不足而...

    Java的异常类

    - **`java.sql.SQLException`**:操作数据库异常。 - **`java.io.IOException`**:输入输出异常。 - **`java.lang.NoSuchMethodException`**:方法未找到异常。 #### 三、总结 异常处理对于编写健壮和可靠的...

    sql 2005jdbc

    5. 处理结果集并关闭资源: ```java while (rs.next()) { System.out.println(rs.getString("列名")); } rs.close(); stmt.close(); conn.close(); ``` 除了基本的连接和查询,JDBC驱动还支持预编译的SQL...

    异常1111111111111111111111111

    6. **`java.sql.SQLException`**:SQL异常,用于报告数据库访问过程中出现的问题。 #### 五、手动抛出异常 除了处理Java自动抛出的异常外,开发人员还可以手动抛出异常。这通常通过使用`throw`关键字来实现。手动...

    dbcp 连接池不合理的锁导致连接耗尽解决方案

    DBCP(Database Connection Pool)是Apache的一个开源项目,提供了一个基于Java的数据源连接池实现。在上述问题中,应用程序遇到了由于连接池不合理的锁机制导致的连接耗尽问题,表现为无法从连接池获取新的数据库...

    Java开发过程中常见异常

    10. **操作数据库异常:SQLException** - 在进行数据库操作时,如果发生错误,如SQL语法错误、连接问题等,会抛出此异常。 11. **输入输出异常:IOException** - 进行输入/输出操作时,如读写文件、网络通信等,...

    Java中Error与Exception的区别.doc

    java.sql.SQLException java.sql.SQLSyntaxErrorException java.lang.RuntimeException java.lang.NullPointerException java.lang.ArrayIndexOutOfBoundsException ``` 通过这个图可以清晰地看到 `Error` 和 ...

    oracle-jdbc-12.2.0.1.zip

    6. **结果集处理**: `ResultSet`接口用于获取查询结果,可以向前或向后滚动,同时提供了获取列值的方法。 7. **批处理**: 使用`Statement`的`addBatch()`和`executeBatch()`方法可以批量执行SQL插入、更新或删除...

    JAVA 开发GlobalEC-Enterprise-SQL-1.1

    在Java开发领域,GlobalEC-Enterprise-SQL-1.1是一个专为构建企业级SQL解决方案而设计的项目。这个项目的核心目标是提供一个高效、可扩展且易于维护的框架,帮助开发者在Java环境中处理复杂的数据库操作。以下是该...

    jdbc连接oracle sqlserver mysql

    - JDBC提供了一种标准的方法来建立、执行SQL语句以及处理结果集。 2. **驱动类型**: - JDBC驱动分为四种类型:类型1(JDBC-ODBC桥接驱动)、类型2(部分Java驱动)、类型3(网络协议驱动)和类型4(纯Java驱动,...

    sql server 驱动jar包

    - 执行SQL:创建Statement或PreparedStatement对象,编写SQL语句并执行,获取结果集,进行数据操作。 5. **特性与优势**: - 高性能:SQL Server JDBC驱动优化了网络通信,提供了高性能的数据访问。 - 兼容性:...

    The MySQL server is running with the –read-only option so it cannot execute this statement

    在排查过程中,发现系统没有设置交换分区,这意味着当物理内存耗尽时,系统没有额外的虚拟内存可使用,从而增加了内存溢出的风险。此外,历史命令显示有同事在执行备份操作,这在系统压力大时可能导致资源冲突。 ...

    JAVA连接配制详解

    数据库连接是Java应用程序与数据库之间建立的通信通道,允许程序发送SQL语句并接收结果。然而,每次应用程序需要执行数据库操作时都创建新的连接是非常低效的,因此引入了连接池的概念。 连接池是一种预创建并管理...

    java c3p0例子

    import java.sql.SQLException; public class Main { public static void main(String[] args) { Connection conn = null; try { conn = C3P0Config.cpds.getConnection(); // 执行数据库操作 } finally { ...

    c3p0配置mysql8.0.21的3个jar包

    import java.sql.SQLException; public class DBUtil { private static DataSource dataSource = C3P0DataSourceConfig.dataSource; public static Connection getConnection() throws SQLException { return ...

    java测试数据库连接关闭

    在上述代码中,即使在处理结果集或执行SQL时出现异常,try-with-resources语句也会确保所有资源被正确关闭。这是防止数据库连接泄漏的最佳实践,可以保持应用程序的高效运行并避免资源耗尽。 总结起来,测试Java中...

    java 异常总结

    ### Java异常总结与详解 #### 引言 在Java编程中,异常处理是软件开发过程中不可或缺的一部分。良好的异常处理能够帮助我们及时发现并解决问题,从而提高程序的稳定性和健壮性。本文旨在全面总结Java中常见的异常...

    javaservlet连接mysql数据库.pdf

    import java.sql.SQLException; public class ConnectDatabaseServlet extends HttpServlet { @Resource(name = "jdbc/sample_db") private DataSource dataSource; protected void doPost...

Global site tag (gtag.js) - Google Analytics