Javaのおはなし。
どうも、PreparedStatementとかでSQLを実行するとその実行したSQL文を取得するのは基本的に無理っぽい。
一応探すとこんなんとかもあるっぽいのだけれども...
JDBCの通信をインターセプトしてSQLのログをファイルに落してくれるツール「P6Spy」
とりあえず、
String SQL_SELECT_USER = "SELECT * " + "FROM t_hoge" + "WHERE " + "t_hoge.foo = ? "; PreparedStatement st = con.prepareStatement(SQL_SELECT_USER); st.setString(1, userId);
とかしちゃってるから、それなりに近いSQL文はわかるっちゃあわかるのだけど...ねぇみたいな。
で、いろいろ考えてみたのだけれど、ConnectionをDriverManagerから取っているとすれば
CharArrayWriter buf = new CharArrayWriter(); PrintWriter writer = new PrintWriter(buf); java.sql.DriverManager.setLogWriter(writer); log.debug(buf.toString());
とかやると、bufにDB稼動時のもろもろ情報が入らないかしらと
思ってみたり。まったく試してないけど。
DataSourceからConnectionを取ってるときでも
多分似たような感じで出来ないかしら...一応
setLogWriter()があったので。だめかしらん...?