preparedStatement.executeUpdate()
업데이트 된 행 수를 반환합니다. 내 연구에 지금까지 업데이트 된 행을 검색 할 수있는 업데이트 쿼리를 수행 할 수 없지만 이것은 분명히 뭔가 빠져있는 그런 기본적인 기능처럼 보인다. 이 일을 성취하는 방법?JDBC/MySQL에서 업데이트 된 행을 검색 할 수 있습니까?
preparedStatement.executeUpdate()
업데이트 된 행 수를 반환합니다. 내 연구에 지금까지 업데이트 된 행을 검색 할 수있는 업데이트 쿼리를 수행 할 수 없지만 이것은 분명히 뭔가 빠져있는 그런 기본적인 기능처럼 보인다. 이 일을 성취하는 방법?JDBC/MySQL에서 업데이트 된 행을 검색 할 수 있습니까?
질문에 대한 첫 번째 의견은 단순히 MySQL에서는 불가능합니다. PostgreSQL은 UPDATE...RETURNING
을이 기능으로 지원합니다.
executeUpdate 대신 executeQuery를 사용하면 결과 집합을 다시 얻습니다.
그런 다음 저장 프로 시저를 함수로 변경하고 변경된 행을 함수 끝에있는 select에 반환하십시오. AFAIK, MySQL의 프로 시저에서 데이터를 반환 할 수 없습니다 (예 : Microsoft SQL 서버).
편집 : 위의 제안은 불가능합니다. JDBC 사양은 쿼리 문에서 업데이트를 허용하지 않습니다 (이에 대한 답변 참조 : http://bugs.mysql.com/bug.php?id=692).
그러나 업데이트하려는 행의 WHERE 절을 알고 있으면 먼저 기본 키를 가져 와서 업데이트를 수행 한 다음 나중에 선택을 수행 할 수 있습니다. 그런 다음 변경된 행을 가져옵니다.
preparedStatement.executeUpdate()를 실행하면 업데이트 할 행을 고유하게 식별 할 수있는 행 식별자가 이미 있으므로 동일한 식별자를 사용하여 쿼리를 수행하고 업데이트 된 행을 패치해야합니다. JDBC API를 사용하여 한 번에 업데이트 및 검색을 수행 할 수 없습니다.
업데이트가 되돌릴 수 없기 때문에 이것은 거짓입니다. 예를 들어 축구 선수를 "신참"에서 "베테랑"으로 업데이트 한 다음 베테랑으로 업데이트 한 선수를 필요로 할 수 있습니다.하지만 물론 더 많은 베테랑이 내 관심사가 아닙니다. – djechlin
나는 단순히 불가능하다고 생각합니다. 내 이해는 PostgreSQL의'UPDATE ... RETURNING'과 똑같은 것을 찾고 있다는 것입니다. 하지만 내 지식으로 MySQL에는 그러한 기능이 없습니다. –
로깅을 위해이 문제를 극복하려고 시도했지만 이와 같은 것을 찾을 수 없었습니다. DB 트리거도 JDBC 드라이버도 도움이되지 않았습니다. 다행스럽게도 대부분의 업데이트 쿼리는 "where"절에서 기본 키 또는 외래 키로 실행되었습니다. 이렇게하면 "일반적인 SQL 구문 분석기"를 사용하여 열 이름과 값을 검색 할 수있었습니다. – Sap
@a_horse_with_no_name - 답변으로 게시 할 수 있으며 받아 들일 것입니다. PostgreSQL과 동등한 것을 알고 있으면 Google에이 기능이 충분하고이 기능이 존재하지 않는다는 불만이 많습니다. – djechlin