2013-08-23 3 views
0

Java 프로그램에서 PostgreSQL로 보내지는 질의를 볼 방법이 필요합니다. 연결을 얻으려면 c3p0 JDBC 연결 풀을 사용하고 있습니다.postgreSQL 드라이버에서 PreparedStatement 인쇄하기

public void readData1() { 
    Connection con = null; 
    try 
    { 
     con = DatabaseFactory.getInstance().getConnection(); 
     con.setAutoCommit(false); 
     java.sql.Timestamp ts= new java.sql.Timestamp(new java.util.Date().getTime()); 
     String query= "INSERT INTO TEST_DATA values(?,?,?)"; 
     PreparedStatement stmt = con.prepareStatement(query); 
     stmt.setDate(1,new java.sql.Date(System.currentTimeMillis())); 
     stmt.setInt(2, 100); 
     stmt.setTimestamp(3,ts); 
     System.out.println(stmt.toString()); 
     stmt.executeUpdate(); 
     con.commit(); 
     stmt.close(); 

    } 
    catch (Exception e) 
    { 
     System.out.println("Could not read from DB, error: "+e.getMessage()); 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try { con.close(); } catch (Exception e) {} 
    } 

} 

사람이 어떻게 된 PreparedStatement에서 SQL 쿼리를 얻을하는 데 도움이 수 없습니다 : 나는 PreparedStatement로 toString 방법을 사용하는 경우, 그것은 나에게

[email protected] 

내 코드를 준다?

감사

답변

3

당신이 c3p0-0.9.5의 시험판 버전을 사용하는 경우, 당신은 시도 할 수 있습니다 ... 당신이 시도 할 수 있도록

아마
System.out.println(stmt.unwrap(PreparedStatement.class).toString()); 

당신이 ...

,하지
printInnerStatement((C3P0ProxyStatement) stmt); 

와 ...

import com.mchange.v2.c3p0.*; 

static void printInnerStatement(C3P0ProxyStatement stmt) 
{ 
    java.lang.reflect.Method m = java.io.PrintStream.class.getMethod("println", new Class[]{Object.class}); 
    stmt.rawStatementOperation(m, System.out, new Object[]{ C3P0ProxyStatement.RAW_STATEMENT }); 
} 

여기에 무슨 일이 벌어지고 있는지 이해하려면 (필자가 필연적으로 저지른 실수를 수정하십시오) Raw Connection and Statement Operations을 참조하십시오.

+0

고마워요! –

+0

문자열에 sql 쿼리를 가져올 수있는 방법이 있습니까? –