2011-12-13 5 views
2

JDBC 코드에 문제가 있습니다. SQLException : Exhausted Resultset

java.sql.SQLException: Exhausted Resultset 
    oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:1270) 
    oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494) 
    org.jboss.jca.adapters.jdbc.WrappedResultSet.getString(WrappedResultSet.java:1359) 
    com.dx.sr_57.user_check.CheckUserDB(user_check.java:100) 
    com.dx.sr_57.user_check.user_compare(user_check.java:123) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:601) 
    org.apache.el.parser.AstValue.invoke(AstValue.java:196) 
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 

방법이 발생하고 나는 그것을 어떻게 해결할 수 :

/** method for checking password into the Oracle database */ 
public String CheckUserDB(String userToCheck) throws SQLException { 
    String storedPassword; 
    if (ds == null) throw new SQLException("No data source");  
    Connection conn = ds.getConnection(); 
    if (conn == null) throw new SQLException("No connection");  

    try { 
    conn.setAutoCommit(false); 
    boolean committed = false; 
    try { 
     PreparedStatement passwordQuery = conn.prepareStatement(
     "SELECT passwd from USERS WHERE userz = ?"); 
     passwordQuery.setString(1, userToCheck); 

     ResultSet result = passwordQuery.executeQuery(); 

     result.next(); 

     storedPassword = result.getString("passwd");       

     conn.commit(); 
     committed = true; 
    } finally { 
     if (!committed) conn.rollback(); 
    } 
    } 
    finally {    
    conn.close(); 
    }  
    return storedPassword; 
} 

이 예외는 다음과 같습니다이 관련 코드?

+0

이 링크는 결과 집합으로 인해 문제를 추적하는 데 도움이 될 것이라고 생각합니다. http://stackoverflow.com/questions/3502005/java-sql-sqlexception-exhausted-resultset –

답변

5
result.next(); 

storedPassword = result.getString("passwd"); 

다음 반환 값을 확인하지 않습니다. 행이 없으면 문제가 발생합니다 ...

if(result.next()){ 
    storedPassword = result.getString("passwd"); 
} 
+0

감사합니다! –

4

문제는 코드와 관련이 없지만 대신 데이터베이스 일 수 있습니다. 표가 비어 있지 않은지 다시 확인하십시오. 테이블이 비어 있으면이 오류가 발생합니다. 오라클과 같은 데이터베이스는 insert, update, alter statements 후에 모두 commit이 필요합니다. 데이터베이스를 통해 커밋을 실행하기 전까지는 변경 사항이 데이터베이스 외부에 표시되지 않을 수 있으므로 오랜 시간 동안이 문제가 발생했습니다. 나는 select 문으로 테이블을 계속 확인했지만 내 oracle db의 문제점은 db를 커밋하지 않았다는 것입니다.

+0

그것은 매우 도움이되었다 thnx !!! – xXxpRoGrAmmErxXx

2

는 오라클 데이터베이스에 문자 대신 VARCHAR 데이터 형식을 사용합니다.

당신이 데이터베이스의 빈 공간이 쿼리 매개 변수

및 쿼리와 비교와 문자 다음 실제 크기를 사용하는 경우

그 결과가 거짓 얻을 수있다 exucuted 얻을 나던.

따라서 Oracle 데이터베이스에서 varchar 데이터 유형을 사용하십시오.