2008. 7. 21. 15:26 슬기로운생활/Web/Servlet
PreparedStatement 로깅하기(LoggableStatement)
. DAO에서 PreparedStatement를 사용하면 SQL의 보안에는 충실하지만 정작 디버깅시 variable을 알아먹을 수가 없어서 에로사항이 꽃피게 된다.
. 그렇다고 할당받은 변수를 그냥 소스상에 박아 넣고 로깅하게 되면 알아먹기는 편하지만 보안상 문제가 발생하고, 퍼포먼스도 떨어진다고 하는데...솔직히 잘은 모르겠다- _-;
. PreparedStatement를 로깅해주는 방법에는 몇가지가 있지만 ibm에서 제시한 LoggableStatement를 사용하는 방법이 가장 깐쫀하다.
( http://www.ibm.com/developerworks/java/library/j-loggable.html , [번역])
. 첨부된 class를 Library에 등록하고, 사용법은 다음과 같다.
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
int fooVal = 99;
String barVal = "zommoc";
Connection conn = dataSource.getConnection();
sql.append(" Select foo, bar From foorbar Where foo < ? and bar = ? ");
pstmt = new LoggableStatement(conn, sql.toString());
pstmt.setInt(1, fooVal);
pstmt.setString(2, barVal);
ResultSet rset = pstmt.executeQuery();
// parse result ...
StringBuffer sql = new StringBuffer();
int fooVal = 99;
String barVal = "zommoc";
Connection conn = dataSource.getConnection();
sql.append(" Select foo, bar From foorbar Where foo < ? and bar = ? ");
pstmt = new LoggableStatement(conn, sql.toString());
pstmt.setInt(1, fooVal);
pstmt.setString(2, barVal);
ResultSet rset = pstmt.executeQuery();
// parse result ...
. 그리고 얘를 콘솔에 로깅할 때는 아래처럼 처리해 주면 된다.
try {
//블라블라~
} catch (SQLException e) {
//블라블라~
} finally {
Exception e = new Exception();
StackTraceElement trace = e.getStackTrace()[0];
Debug.logWrite(trace.getClassName()+"."+trace.getMethodName(), ((LoggableStatement)pstmt).getQueryString(), true, false);
ConnectionFactory.release(conn,pstmt,rset);
}
* Log찍어주는 Debug class는 싸제라서...그냥 System.out.println 해도 됨.
//블라블라~
} catch (SQLException e) {
//블라블라~
} finally {
Exception e = new Exception();
StackTraceElement trace = e.getStackTrace()[0];
Debug.logWrite(trace.getClassName()+"."+trace.getMethodName(), ((LoggableStatement)pstmt).getQueryString(), true, false);
ConnectionFactory.release(conn,pstmt,rset);
}
* Log찍어주는 Debug class는 싸제라서...그냥 System.out.println 해도 됨.
. 이밖에도 p6spy 라는 framework도 존재하는데, 얘는 좀 쓰기 구찮다. 그냥 이거 쓰자;
'슬기로운생활 > Web/Servlet' 카테고리의 다른 글
Processing of multipart/form-data request failed. (0) | 2013.12.26 |
---|---|
[Java] Spring+iBatis 연동시 No SqlMapClient specified (0) | 2011.09.02 |
트위터 사용에 관해 주절주절 떠들어 봅니다. (11) | 2010.04.22 |
Javascript 문자열 컨트롤 (0) | 2009.09.16 |
서버설정을 properties로 만든 거. (0) | 2008.09.19 |