我现在在用MVC结构做一个B/S结构的分页数据库管理软件。数据库用的是Oracle,但是出现一个奇怪的问题。就是分页过程中的第一页和最后一页都好用,但是点击“下一页”或是“上一页”时去总是出错。提示说“无法在套接字中读取更多的数据”。但是如果将JAVA中的SQL语名拷贝出来,在SQLPlus中运行却可以读出数据。不知如何解决。
    还望各位高手指教。

解决方案 »

  1.   

    具体的出错代码如下:(第一页  1到13条 好使 第二页  13到26条 出错 )
    报警信息的SQL语句:select * from card_manager.t_alert where(rownum < 14 and ( f_club_id = '1111111111' or f_club_id = '2222222222' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '5145641564' or f_club_id = 'ijj' or f_club_id = '7890809809')) minus select * from card_manager.t_alert where rownum < 1报警信息的SQL语句:select * from card_manager.t_alert where(rownum < 27 and ( f_club_id = '1111111111' or f_club_id = '2222222222' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '6454154156' or f_club_id = '5145641564' or f_club_id = 'ijj' or f_club_id = '7890809809')) minus select * from card_manager.t_alert where rownum < 14java.sql.SQLException: 无法从套接字读取更多的数据 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160) at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:963) at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:893) at oracle.jdbc.ttc7.Ocommoncall.receive(Ocommoncall.java:104) at oracle.jdbc.ttc7.TTC7Protocol.rollback(TTC7Protocol.java:487) at oracle.jdbc.driver.OracleConnection.rollback(OracleConnection.java:1376) at com.sundy.cardmanager.db.ConnectionWrapper.rollback(ConnectionWrapper.java:273) at com.sundy.cardmanager.db.DBTransaction.rollback(DBTransaction.java:81) at com.sundy.cardmanager.db.Query.Open(Query.java:128) at com.sundy.cardmanager.info.AlertsInfo.populate(AlertsInfo.java:127) at com.sundy.cardmanager.info.AlertInfoAction.perform(AlertInfoAction.java:104) at org.apache.struts.action.ActionServlet.processActionPerform(ActionServlet.java:1787) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1586) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107) at java.lang.Thread.run(Thread.java:536)ApplicationDispatcher[/CardManager]: Servlet.service() for servlet debugjsp threw exceptionjavax.servlet.ServletException: Cannot find bean alerts in scope null at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:463) at org.apache.jsp.AlertInfo$jsp._jspService(AlertInfo$jsp.java:1206) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:431) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:355) at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.java:1759) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1596) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
      

  2.   

    这是出错代码的第二部分at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107) at java.lang.Thread.run(Thread.java:536)StandardWrapperValve[action]: Servlet.service() for servlet action threw exceptionjavax.servlet.ServletException: Cannot find bean alerts in scope nulljavax.servlet.ServletException: Cannot find bean alerts in scope null at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:463) at org.apache.jsp.AlertInfo$jsp._jspService(AlertInfo$jsp.java:1206) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:202) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:683) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:431) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:355) at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.java:1759) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1596) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:492) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1012) at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1107) at java.lang.Thread.run(Thread.java:536)
      

  3.   

    用这种方法试试
    select * 
    from card_manager.t_alert 
    where (rownum < 27 )
      and (f_club_id IN ('1111111111','2222222222','6454154156',
    '6454154156','6454154156','6454154156',
    '6454154156','6454154156','6454154156',
    '6454154156','6454154156','6454154156',
    '6454154156','5145641564','ijj',
    '7890809809'))
     minus 
     select * 
     from card_manager.t_alert 
     where rownum < 14
      

  4.   

    谢谢了,可是还是不行,我有下面的语句都不行。
    select * from card_manager.t_alert where(rownum < 27) minus select * from card_manager.t_alert where rownum < 14可能问题不在这条语句上,因为这条语句在SQLPlus上运行可以。不知道你注意到下面的这句没有
    javax.servlet.ServletException: Cannot find bean alerts in scope null
      

  5.   

    你把你的jsp/servlet给我看看,是不是有问题!
      

  6.   

    最笨的方法是在sql语句select * 
    from card_manager.t_alert 
    where (1 = 1)
      and (f_club_id IN ('1111111111','2222222222','6454154156',
    '6454154156','6454154156','6454154156',
    '6454154156','6454154156','6454154156',
    '6454154156','6454154156','6454154156',
    '6454154156','5145641564','ijj',
    '7890809809'))
    假如要翻到第2页时,你空循环13次,然后假如游标没有指向end,然后循环游标13次得到你需要的数据!
      

  7.   

    因为数据量太大,所以以前用循环的方法时,速度太慢,而且以前用的是MySql,现在想用Oracle 中的rownum来直接查找数据位置,没想到,唉...................
      

  8.   

    我现在做的一个系统,JDBC连接ORACLE,分页显示,也没有出现你所说的那种情况,那张表的记录大概十几万条!你看看是不是有其他的连接问题!我的SQL语句:
    select rownum,a.* 
    from (select code,name,ukid
      from   goods
      where (code like 'BB%')
    ) a 
    where rownum <=30
    minus 
    select rownum,a.* 
    from (select code,name,ukid
      from   goods
      where (code like 'BB%')
    ) a 
    where rownum <=15其中Goods表中数据大概12万多条,运行都没有问题!
      

  9.   

    把源码发到俺信箱里:[email protected]俺现在正在研究这个问题呢
      

  10.   

    adu_neu:
        不好意思,我不能把源代码发给你,因为.......你应该知道吧。
      

  11.   

    很感谢这么多人对我的帮助,虽然到现在也没有解决这个问题。我现在发现可能是我的Oracle有点问题。我用的是9i,在8i上没有出现这种问题。如果我找到解决的办法,一定把它做成FAQ以利于大家共享。
      

  12.   

    这个分页程序其实是常用的jsp小程序,只是你问错了地方,如果你到java的组里面去,精华区里肯定有很多这样的例子
      

  13.   


    连接数据库 有很多种方式, 
    会不会你连接的这种情况 少了你的这种功能? 
    以前好像听说用jdbc odbc  连接时 很多功能不能做?
    一种猜测......
      

  14.   

    我装了个正版的Oracle9,还是出现上面的错误,里面出现TTC7Protocol.java,不知道这是什么东西。错误内容如下:java.sql.SQLException: 无法从套接字读取更多的数据 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160) at oracle.jdbc.ttc7.MAREngine.unmarshalUB1(MAREngine.java:963) at oracle.jdbc.ttc7.MAREngine.unmarshalSB1(MAREngine.java:893) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:369) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891) at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:1198) at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2400) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:527) at search.searchMain.<init>(searchMain.java:26) at search.searchMain.main(searchMain.java:40)
      

  15.   

    我终于找到解决的办法了,那就是用下面的语句:select * from (select rownum id, tableA.* from tablA where (各种查询条件写在这里)) where id between 10 and 20;上面的语句绝对好用,而且速度也会比用minus快不少。记注不能这么写:select * from (select rownum, tableA.* from tablA where (各种查询条件写在这里)) where rownum between 10 and 20;原因是......自己去想吧.
      

  16.   

    select * from 
    (
    select rownum id, A.* from A order by A.c1  //rownum->order
    )
    wherer id between 10 and 20
    -------------------------------------
    select * from 
    (
    select rownum id, B.* from 
    (select * from A order by a.c1) B// order ->rownum
    )
    -------------------
    比较一下好了
    wherer id between 10 and 20;