我正在处理一些非常旧的代码(10 年以上),并且(可能)实际上不可能获得将要执行的查询, 但我需要记录查询以防出现错误。
我尝试阅读该声明的元数据。但当我尝试获取确切的查询时,这并不能完成任务。
System.out.println(preparedStatement);
也不起作用,因为我们使用了一个非常旧的 JDBC 驱动程序,它没有为准备好的语句实现一个很好的 toString()
并且我不允许更改驱动程序。
public void doQuery(Connection conn) throws SQLException {
PreparedStatement st=null;
ResultSet result=null;
st=createStatement(conn);
result = st.executeQuery();
...
}
public abstract PreparedStatement createStatement(Connection conn) throws SQLException;
createStatement
是一个抽象方法,有 46 种(神奇的)实现,它们都是不同的。
这就是让我很难弄清楚 Statement
是如何创建的。
我只想拥有类似的东西
String query = preparedStatement.getQueryString();
很久以前,我使用了p6spy:真正的 JDBC 驱动程序的代理,在将实际查询传递给真正的驱动程序之前记录它们。
另一个解决方案是datasource-proxy,顾名思义,它代理数据源,而不是低级驱动程序。我从来没有尝试过。