2010-08-17 3 views
19

오류가 발생합니다. java.sql.SQLException : Exadataed ResultSet 오라클 데이터베이스에 대해 쿼리를 실행합니다. 연결은 Websphere에 정의 된 연결 풀을 통해 이루어집니다. 다음과 같이 실행 코드는 다음과 같습니다java.sql.SQLException : Exhausted Resultset

  if (rs! = null) (
       while (rs.next()) (
        count = rs.getInt (1); 
       ) 
      ) 

내가 결과 집합에 데이터가 포함되어 있습니다 (rs.next())

감사

+0

는 결과 집합을 읽는 동안 폐쇄 문 또는 연결을 했습니까? –

+2

@Arne : 그것은 오히려'SQLException : ResultSet is closed'를 throw했을 것입니다. – BalusC

+7

나중에 stacktrace를 추가하고 라인을 가리 키십시오. 수락 된 답변을 보는 것은 던져진 행이 ** 귀하가 질문에 게시 한 코드에서 ** 절대적으로 ** 아닙니다. 스택 트레이스 해석으로 더 연습해야합니다. 나는 내 대답을 삭제했다. – BalusC

답변

29

결과 집합을 처리 한 후 열 값에 액세스하려고 시도하는 동안이 오류가 발생했습니다. 이 당신을 도울 것입니다

if (rs! = null) { 
    while (rs.next()) { 
    count = rs.getInt(1); 
    } 
    count = rs.getInt(1); //this will throw Exhausted resultset 
} 

희망 :)

STMT 다른 결과 집합 butexpecting 재사용 될 때 일반적으로 발생
+0

간단하고 명확한 감사합니다 –

+0

다른 데이터베이스 (예 : mysql, sql 서버 등)에 대해 동일한 예외가 생성됩니까? –

+0

잘 모르겠습니다. 아마 네. 데이터베이스 벤더에 따라 달라집니다 .-) – sourcerebels

4

보십시오이 : 나는했습니다

if (rs != null && rs.first()) { 
    do { 
     count = rs.getInt(1); 
    } while (rs.next()); 
} 
+2

결과 집합이 앞으로 만있는 경우 실패합니다 ... –

1

, 새로운 STMT과하는 executeQuery를 creting보십시오. 그것은 나를 위해 그것을 고쳤다!

2

결과 세트를 위로 재설정하면 rs.absolute(1)을 사용하면 예외적 인 결과 세트가 생성되지 않습니다.

while (rs.next) { 
    System.out.println(rs.getString(1)); 
} 
rs.absolute(1); 
System.out.println(rs.getString(1)); 

rs.absolute (1) 대신 rs.first()를 사용할 수도 있습니다.

0

res.getInt (1)가 null이 아님을 확인하십시오. null 일 수있는 경우 정수 카운트 = null을 사용하십시오.이고 int count가 0이 아닙니다.

Integer count = null; 
    if (rs! = null) (
        while (rs.next()) (
         count = rs.getInt (1); 
        ) 
       ) 
2

특정 조건에서 데이터베이스에서 반환 된 레코드가없는 경우 및 rs.getString (1); 이 오류는 "소모 된 결과"입니다.

는 실행하기 전에, 내 코드이었다 : 수정 후

rs.next(); 
sNr= rs.getString(1); 

:

while (rs.next()) { 
    sNr = rs.getString(1); 
} 
1

된 ResultSet이 while 루프의 외부를 사용하는 경우이 예외가 발생합니다. ResultSet과 관련된 모든 처리를 While 루프 안에 보관하십시오. 오류 뒤에

0

문제점 : 트랜잭션이 성공 될 때까지 삽입 한 데이터에 액세스 할 수없는 것입니다 Oracle 데이터베이스에 액세스를 시도하고에 데이터를 삽입 한 후 당신이 commit 쿼리를 해고해야하는 거래를 완료 할 경우 탁자. Oracle 데이터베이스는 기본적으로 자동 커밋 모드가 아니기 때문에

솔루션 :

이동 SQL PLUS에 다음과 같은 쿼리를 수행 ..

SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 28 15:29:43 2017 

Copyright (c) 1982, 2010, Oracle. All rights reserved. 

Enter user-name: scott 
Enter password: 

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 
With the Partitioning, OLAP, Data Mining and Real Application Testing options 

SQL> desc empdetails; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ENO            NUMBER(38) 
ENAME            VARCHAR2(20) 
SAL            FLOAT(126) 

SQL> insert into empdetails values(1010,'John',45000.00); 

1 row created. 

SQL> commit; 

Commit complete. 
관련 문제