Statement object를 이용하여 쿼리 수행시 '서버에서 트랜잭션을 재개하지 못했습니다' 오류가 발생과 관련된

MS SQL Server 2005 JDBC Driver 의 알려진 이슈가 있습니다. (JDBC 1.2에서 FIX될 예정임)

이에 우선적으로 아래 Workaround로 문제가 해결되는지 체크가 필요할 것으로 보입니다.

 

JDBC 1.1에서 위 문제를 피하시려면 다음의 WORKAROUND를 사용하시면 됩니다.

 

1) Statement 대신 PreparedStatement  사용

 

또는,

 

2) Statement.getMoreResults() 및 Statement.getUpdateCount() 를 이용해 모든 Recordset이 처리되도록 코드 수정

 

sample code는 다음과 같습니다.

 

Statement stmt = conn.createStatement();
stmt.execute("exec testProcReturns");
int resultSetNum = 0;
for (boolean resultsEndOrUpdateCount = false;
;
resultsEndOrUpdateCount = !stmt.getMoreResults())
{
if (resultsEndOrUpdateCount)
{
int updateCount = stmt.getUpdateCount();
if (-1 == updateCount) // end of results
break;

System.out.println("Update count is: " +
updateCount);
}
else // result is ResultSet
{
ResultSet rs = stmt.getResultSet();

 

System.out.println("Found a
result set");
while (rs.next())
{

System.out.println("ResultSetValue: " + rs.getString(1));
}


rs.close();
}
}

stmt.close();

 

감사합니다

박 상 준


'개발자' 카테고리의 다른 글

[MS-SQL] Update ~ Select  (0) 2009.03.24
[JAVA JDBC] Procedure with Multi ResultSet  (0) 2008.11.11
SQL 쿼리 : 시간 제한 만료  (0) 2008.08.26
VB Script 에서 Java Script Function 호출하기  (0) 2008.08.22
따옴표// 작은 따옴표  (0) 2008.08.22
,