2012-11-15 1 views
1

업데이트 된 영향을받는 행의 ID를 반환하려고했습니다. 궁금하네요, 왜 내가 이걸 돌려서 ResultSet을 얻지 못했을까요? (기본 키는 괜찮을 겁니다.) Statement.RETURN_GENERATED_KEYS을 설정 했는데요? 가장 최근의 jTDS 드라이버 1.3.0을 사용하여 Microsoft SQL Server에 연결합니다.결과 문을 update 문에서 반환 하시겠습니까?

try 
    { 
     PreparedStatement pst = SQL.getConnection().prepareStatement(qry, Statement.RETURN_GENERATED_KEYS); 

     pst.setString(1, someValue); 
     pst.setString(2, someOtherValue); 

     int affectedRows = pst.executeUpdate(); 
     System.out.println(affectedRows); //to make sure whether the query updated anything 

     ResultSet rs = pst.getGeneratedKeys(); 

     if (rs.next()) 
     { 
      System.out.println(rs.getInt(1)); 
     } 
    } catch (Exception e) { 
     e.printStacktTrace(); 
    } 

여기에 어떤 제안이 있습니까?

+0

쿼리 란 무엇입니까? 생성되는 키는 무엇입니까? – Thilo

+1

은 자동 증분 열을 검색하려고 시도하는 핵심 요소입니까 ?? – PermGenError

+0

어떤 오류가 있습니까? 'rs' null? 'rs.next()'가 없습니까? 'rs.getInt (1)'실패합니까? 의미있는 원조를 원한다면 좀 더 자세하게 말하십시오. – SJuan76

답변

0

한 가지 해결 방법은 저장 프로 시저를 만들고 CallableStatement 메서드를 사용하여 호출하는 것입니다. 왜이 방법이 다른 방법이 아닌지 물어 보지 마라.

+0

CallableStatement를 사용하여'callableStatement.executeUpdate()'를 사용하여 저장 프로 시저를 호출하지만 여전히이 오류가 발생합니다. 루프를 사용하여 같은 위치에서 여러 저장 프로 시저를 호출하려고합니다. 그러나이 문제는 하나의 저장 프로 시저에서만 발생합니다. 알려주십시오. –

0

SQL Server 2008 이상에서는 INSERT 또는 UPDATE 문에 OUTPUT clause을 사용할 수 있습니다. 예를 들어 this answer을 참조하십시오.