0

Java プログラムから PostgreSQL に送信されるクエリを確認する方法が必要です。c3p0接続を取得するために JDBC 接続プールを使用しています。toStringPreparedStatement でメソッドを使用すると、

com.mchange.v2.c3p0.impl.NewProxyPreparedStatement@577b57a3 

私のコード:

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 クエリを取得する方法を教えてください。

ありがとう

4

1 に答える 1

4

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を参照してください。

于 2013-08-23T11:11:39.883 に答える