'SQLException'에 해당되는 글 2건

  1. 2008.12.09 DB2에서 com.ibm.db2.jcc.b.oh: [ibm][db2][jcc][102][10040] 발생한 경우 by 지영아빠
  2. 2008.10.21 DB2 setObject 문제 by 지영아빠

DB2에서 jdbc를 이용해서 batch를 이용하다 보면, 다음과 같은 에러가 발생할 경우가 있습니다. 이때에는 코드상에 getNextException을 전부 찍어줘야 문제의 원인을 찾을 수 있습니다.


-------------------------    다      음 ------------------

com.ibm.db2.jcc.b.oh: [ibm][db2][jcc][102][10040] atomic 일괄처리에 실패했습니다일괄처리가 제출되었지만 각 일괄처리 구성원에서 최소 한 개의 예외가 발생했습니다.

getNextException()을 사용하여 특정 일괄처리 요소에 대한 예외를 검색하십시오.

           at com.ibm.db2.jcc.b.p.a(p.java:411)

           at com.ibm.db2.jcc.b.jg.c(jg.java:2736)

           at com.ibm.db2.jcc.b.jg.b(jg.java:2567)

           at com.ibm.db2.jcc.b.jg.executeBatch(jg.java:1450)

           at com.xxx.common.db.util.DBBatchUtils.process(DBBatchUtils.java:42)

           at com.xxx.common.db.data.mapper.DBDirectAccessMapperImpl.insert(DBDirectAccessMapperImpl.java:270)

           at com.xxx.common.db.data.mapper.DBFailOverMapperImpl.insert(DBFailOverMapperImpl.java:148)

           at com.xxx.common.db.data.mapper.AbstractMapper.insert(AbstractMapper.java:384)

           ... 61 more

 

Exception 한글 번역 :

atomic 일괄처리에 실패했습니다일괄처리가 제출되었지만 각 일괄처리 구성원에서 최소 한 개의 예외가 발생했습니다.

getNextException()을 사용하여 특정 일괄처리 요소에 대한 예외를 검색하십시오.

 

Exception 영문 원본 :

Non-atomic batch failure. The batch was submitted, but at least one exception occurred on an individual member of the batch.
Use getNextException() to retrieve the exceptions for specific batched elements.

------------------------------------------------------


이런 경우에는 getNextException()을 통해서 sqlexception을 처리해 줘야 정확한 원인을 알 수 있습니다. 

아래와 같이 작성하면 해결할 수 있습니다.

try  {
   conn.executeBatch ();

} catch (SQLException e) {

       while (e != null) {

             e.printStackTrace();

             e = e.getNextException();

       }

}

프로그래밍에 조금이나마 도움이 되기를..


저작자 표시
신고
Posted by 지영아빠

DB2 setObject 문제

언어/Java : 2008.10.21 19:43
이런 Exception이 발생해서 코드를 살펴보니 다음과 같이 되어 있었습니다.

com.ibm.db2.jcc.b.SqlException: [ibm][db2][jcc][10281][10295] JDBC 유형 0이(가) 아직 지원되지 않습니다.
    at com.ibm.db2.jcc.b.t.h(t.java:1053)
    at com.ibm.db2.jcc.b.jg.b(jg.java:491)
    at com.ibm.db2.jcc.b.jg.a(jg.java:1261)
    at com.ibm.db2.jcc.b.jg.setObject(jg.java:1241)


다음의 코드에서 문제가 발생했습니다.

pstmt.setObject(1, null, Types.NULL);

이것을 1이 아닌 2 이상이 되도록 수정하니 Exception이 사라지네요..
Oracle에서는 이런 문제가 발생하지 않았는데, DB2 의 jdbc드라이버에서만 발생하는 것 같습니다.

물론 A와 B는 null이 가능하고, C는 pk라고 할때 다음과 같습니다.

Exception이 발생하는 Query는 다음과 같습니다.
String query = "UPDATE TMP SET A=?,B=? WHERE C=?";
PreparedStatement pstmt = conn.preparedStatement(query);
pstmt.setObject(1, null, Types.NULL);
pstmt.setObject(2, "abc");
pstmt.setObject(3, "123");
pstmt.executeUpdate();

다음과 같이 수정하면 발생하지 않습니다.
String query = "UPDATE TMP SET B=?,A=? WHERE C=?";
PreparedStatement pstmt = conn.preparedStatement(query);
pstmt.setObject(1, "abc");
pstmt.setObject(2, null, Types.NULL);
pstmt.setObject(3, "123");
pstmt.executeUpdate();



신고
Posted by 지영아빠

티스토리 툴바