我写了这样的一条SQL语句select Employees.Ename,Assessment.Astatus from Employees left outer join Assessment on Assessment.Aid=Employees.Eid and month(Assessment.Adate)=month(getdate()) where Employees.Edepartment=1在数据库建立查询能搜出数据,可打开网页时却会出错jsp中这样写:rs = con.getInfo(....以上的SQL语句);交替出现以下两个异常,非常诡异.....(我一直想不明白为什么异常偶尔会不同的  =   = )com.microsoft.sqlserver.jdbc.SQLServerException: 无法从已删除行获取值。java.lang.NullPointerException
求解答~!!!!!!

解决方案 »

  1.   

    把getInfo()方法的代码贴出来。
      

  2.   

    来了,贴上代码~~!!!!
    --------------------------------------------------------------------------------public ResultSet getInfo(String str){
    ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    ht.put(Context.PROVIDER_URL, "t3://localhost:7001");
    try {
     ctx = new InitialContext(ht);
     ds = (javax.sql.DataSource) ctx.lookup("notice");
    } catch (Exception e) {
     e.printStackTrace();
    }
    if (ds == null) {
     System.out.println("error");
    } else {
     System.out.println("Select OK!");
    }
    try{
    mycon=ds.getConnection();
        stmt=mycon.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
        rs=stmt.executeQuery(str);
       
        
    }catch(Exception e){
    System.err.println(e.getMessage());
    e.printStackTrace();
    }
    return rs;
    }
      

  3.   

    从这里开始出现异常:
     
    while(rs.next()){
          
           id = String.valueOf(rs.getInt(1));
           name = rs.getString(2);
           src = rs.getString(3);
    }这些列均无法读取,异常:com.microsoft.sqlserver.jdbc.SQLServerException: 无法从已删除行获取值。刚读出来的RS,怎么会删除行了?一头雾水
      

  4.   

    Error 500--Internal Server Error 
    com.microsoft.sqlserver.jdbc.SQLServerException: 无法从已删除行获取值。
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyCurrentRowIsNotDeleted(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getterGetColumn(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.getInt(Unknown Source)
    at weblogic.jdbc.wrapper.ResultSet_com_microsoft_sqlserver_jdbc_SQLServerResultSet.getInt(Unknown Source)
    at jsp_servlet._personelmanage.__assessment1._jspService(__assessment1.java:131)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:225)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:127)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3212)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1983)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1890)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1344)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
     
      

  5.   

    问题就出在这个参数
    ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLETYPE_FORWARD_ONLY:缺省类型。只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响。 
    TYPE_SCROLL_INSENSITIVE:允许在列表中向前或向后移动,甚至可以进行特定定位,例如移至列表中的第四个记录或者从当前位置向后移动两个记录。不会受到其他用户对该数据库所作更改的影响。 
    TYPE_SCROLL_SENSITIVE:象 TYPE_SCROLL_INSENSITIVE 一样,允许在记录中定位。这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。类似的,对数据值的更改也将反映在 ResultSet 中。 
    第二个参数设置 ResultSet 的并发性,该参数确定是否可以更新 ResultSet。其选项有:CONCUR_READ_ONLY:这是缺省值,指定不可以更新 ResultSet 
    CONCUR_UPDATABLE:指定可以更新 ResultSet 
    受其他用户的影响!别人把你的删除喽哇!看情况调整一下参数吧!