有没有办法在构造完PreparedStatement后读取它的SQL查询?

问题描述 投票:0回答:1

我正在处理一些非常旧的代码(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();
java sql jdbc
1个回答
0
投票

很久以前,我使用了p6spy:真正的 JDBC 驱动程序的代理,在将实际查询传递给真正的驱动程序之前记录它们。

另一个解决方案是datasource-proxy,顾名思义,它代理数据源,而不是低级驱动程序。我从来没有尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.