Oracle JDBC PreparedStatement 개체에서 바인딩 매개 변수 값을 가져오는 방법
Oracle JDBC를 사용할 때 실행된 모든 문장의 로깅을 실제 바인딩 파라미터로 구현하고자 합니다.그리고 이러한 로깅 방법은 PreparedStatement 개체를 매개 변수로 전달하는 것만 가능했으면 합니다.
예를 들어 PreparedStatement를 작성하고 파라미터를 하나 바인딩했습니다.
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM employees WHERE employee_id = ?");
ps.setInt(1,1);
이제 ps에서 로그 파일에 넣을 수 있는 실제 SQL 문 "SELECT * FROM memployee_id = 1"을 얻을 수 있으면 좋겠습니다.
지금까지 제가 사용할 수 있는
((oracle.jdbc.driver.OracleStatement) ps).getOriginalSql()
갖기 위해
SELECT * FROM employees WHERE employe_id = ?
이제 ps에서 현재 바인딩 변수 목록을 가져와 bind 매개 변수 값으로 대체할 수 있는 방법이 필요합니다.
ps.getClass().getDeclaredFields()와 ps.getClass().getSuperclass().getDeclaredFields()를 검색해 보았지만 bind 매개 변수 값과 해당 유형이 저장된 위치를 아직 찾지 못했습니다.
그들을 어디서 찾을지 제안해 주실 수 있나요?
대부분의 로깅 프레임워크는 Nested Diagnostic Context에 대한 개념을 가지고 있습니다.준비된 문을 채울 때 쿼리와 해당 매개 변수를 저장할 수 있습니다.
아니면 한 걸음에 할 수도 있습니다.
PreparedStatement fillAndLog(Connection conn, String query, Object... args) {
int i = 0;
PreparedStatement pstmt = conn.prepareStatement(query);
for (Object o : args) {
if (o instanceof String) {
pstmt.setString(i, (String)o);
} // else...
i++;
}
log.debug(String.format(query.replaceAll("\\?", "%s"), args));
return pstmt;
}
p6spy는 데이터베이스 드라이버에 대한 프록시로 모니터링 및 로깅이 가능합니다.
언급URL : https://stackoverflow.com/questions/1130886/how-to-get-values-of-bind-parameters-from-oracle-jdbc-preparedstatement-object
'programing' 카테고리의 다른 글
자바스크립트를 사용하여 div에 HTML 페이지를 로드하려면 어떻게 해야 합니까? (0) | 2023.10.11 |
---|---|
저장된 MySql로 루프 및 선택 (0) | 2023.10.11 |
es6 바닐라 자바스크립트에서 Ajax 요청 (0) | 2023.10.11 |
angularjs에서 클릭한 ElementId를 검색하는 방법은? (0) | 2023.10.11 |
Excel용 Apache POI:전체 열에 대해 셀 유형을 "텍스트"로 설정 (0) | 2023.10.11 |