gpt4 book ai didi

java - 从 Oracle 的 Prepared Statement 获取结果 sql

转载 作者:行者123 更新时间:2023-11-30 10:52:15 37 4
gpt4 key购买 nike

我正在寻找从 Java 中为 Oracle 实现准备的语句中获取结果 sql(带有注入(inject)参数)的可能性。

通过 MySQL 方法 toString() 通过方法 asSql()com.mysql.jdbc.PreparedStatement 获取想要的 sql。

但是通过Oracle实现oracle.jdbc.driver.OraclePreparedStatementWrapper,我找不到获取结果sql的方法。

最佳答案

我相信 OraclePreparedStatement 没有这样的东西。

如果您绝对需要该功能,我想您可以围绕 PreparedStatement 包装一些代码:

public class LoggingPreparedStatement implements PreparedStatement {

private PreparedStatement delegate;

private String sql;

private Map<Integer,Object> parameter = new TreeMap<Integer,Object>();

public LoggingPreparedStatement(Connection con, String sql) throws SQLException {
this.sql = sql;
this.delegate = con.prepareStatement(sql);
}

@Override
public void setString(int parameterIndex, String x) throws SQLException {
parameter.put(parameterIndex, x);
delegate.setString(parameterIndex, x);
}

//What you asked for
public String getSQL() {
String returnSQL = sql;
//TreeMap returns sorted by key
for(Object o : parameter.values()) {
//Replace first ? with the value
returnSQL = returnSQL.replaceFirst("\\?", o.toString());
}
return returnSQL;
}

//Lots of other methods to implement and delegate to original statement
[...]
}

然后你会代替

PreparedStatement ps = con.prepareStatement(sql);

需要改成

LoggingPreparedStatement ps = new LoggingPreparedStatement(con, sql);

所以整个过程还是比较痛苦的。

关于java - 从 Oracle 的 Prepared Statement 获取结果 sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34412289/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com