2012-08-07 2 views
0
preparedStatement.executeUpdate() 

업데이트 된 행 수를 반환합니다. 내 연구에 지금까지 업데이트 된 행을 검색 할 수있는 업데이트 쿼리를 수행 할 수 없지만 이것은 분명히 뭔가 빠져있는 그런 기본적인 기능처럼 보인다. 이 일을 성취하는 방법?JDBC/MySQL에서 업데이트 된 행을 검색 할 수 있습니까?

+1

나는 단순히 불가능하다고 생각합니다. 내 이해는 PostgreSQL의'UPDATE ... RETURNING'과 똑같은 것을 찾고 있다는 것입니다. 하지만 내 지식으로 MySQL에는 그러한 기능이 없습니다. –

+0

로깅을 위해이 문제를 극복하려고 시도했지만 이와 같은 것을 찾을 수 없었습니다. DB 트리거도 JDBC 드라이버도 도움이되지 않았습니다. 다행스럽게도 대부분의 업데이트 쿼리는 "where"절에서 기본 키 또는 외래 키로 실행되었습니다. 이렇게하면 "일반적인 SQL 구문 분석기"를 사용하여 열 이름과 값을 검색 할 수있었습니다. – Sap

+0

@a_horse_with_no_name - 답변으로 게시 할 수 있으며 받아 들일 것입니다. PostgreSQL과 동등한 것을 알고 있으면 Google에이 기능이 충분하고이 기능이 존재하지 않는다는 불만이 많습니다. – djechlin

답변

3

질문에 대한 첫 번째 의견은 단순히 MySQL에서는 불가능합니다. PostgreSQL은 UPDATE...RETURNING을이 기능으로 지원합니다.

2

executeUpdate 대신 executeQuery를 사용하면 결과 집합을 다시 얻습니다.

그런 다음 저장 프로 시저를 함수로 변경하고 변경된 행을 함수 끝에있는 select에 반환하십시오. AFAIK, MySQL의 프로 시저에서 데이터를 반환 할 수 없습니다 (예 : Microsoft SQL 서버).

편집 : 위의 제안은 불가능합니다. JDBC 사양은 쿼리 문에서 업데이트를 허용하지 않습니다 (이에 대한 답변 참조 : http://bugs.mysql.com/bug.php?id=692).

그러나 업데이트하려는 행의 WHERE 절을 알고 있으면 먼저 기본 키를 가져 와서 업데이트를 수행 한 다음 나중에 선택을 수행 할 수 있습니다. 그런 다음 변경된 행을 가져옵니다.

+0

24112 [풀 -1 스레드 -1] 오류 - 치명적인 오류 : java.sql.SQLException : executeQuery()로 데이터 조작 문을 발행 할 수 없습니다. – djechlin

+0

죄송합니다, 당신 말이 맞습니다. 이것은 JDBC 스펙에서 금지되어 있습니다 (위의 편집 된 응답 참조). –

+0

"where"절의 값이 테이블의 다른 기존 값으로 변경되므로 변경된 행보다 많은 행이 생성됩니다. – djechlin

-1

preparedStatement.executeUpdate()를 실행하면 업데이트 할 행을 고유하게 식별 할 수있는 행 식별자가 이미 있으므로 동일한 식별자를 사용하여 쿼리를 수행하고 업데이트 된 행을 패치해야합니다. JDBC API를 사용하여 한 번에 업데이트 및 검색을 수행 할 수 없습니다.

+1

업데이트가 되돌릴 수 없기 때문에 이것은 거짓입니다. 예를 들어 축구 선수를 "신참"에서 "베테랑"으로 업데이트 한 다음 베테랑으로 업데이트 한 선수를 필요로 할 수 있습니다.하지만 물론 더 많은 베테랑이 내 관심사가 아닙니다. – djechlin

관련 문제