java - 无法使用 driverspy 获取查询字符串

标签 java jdbc log4j prepared-statement jtds

我正在做一个项目,我需要在日志文件中记录查询并将这些查询也添加到我的断言语句中

我已经使用以下驱动程序构建了准备好的语句

net.sf.log4jdbc.sql.jdbcapi.DriverSpy

和网址

jdbc:log4jdbc:sybase:Tds ........ 

我使用的依赖如下:

    <dependency>
        <groupId>net.sourceforge.jtds</groupId>
        <artifactId>jtds</artifactId>
        <version>1.3.1</version>
    </dependency>

准备语句示例:

public void getTest(MyBean bean) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DatabaseUtil.getDatabaseConnection();
            ps = conn.prepareStatement(objTestQueryUtil.getQuery("GET_Test"));
            ps.setString(1, bean.getTypeOfTest());
            ps.setString(2, bean.getTest());
            ps.setString(3, bean.getTestState());
            ps.setString(4, bean.getTestStep());
            rs = ps.executeQuery();
            while(rs.next()) {
                bean.setTest(rs.getInt("Test"));
            }
        }catch (SQLException e) {
            AutomationLog.error(e.getMessage(),e);
        }finally {
            DatabaseUtil.close(conn,ps,rs);
        }
    }

在我的断言类中,sql 应该在我的断言代码中看到:

Assert.assertTrue("Got Test "+query, true);

你能告诉我是否有任何方法可以在 java 中获取变量查询,目前查询直接登录到日志文件中,我无法找到我可以在我的脚本中获取它们的方法,即存储在任何变量等上

如果当前依赖项没有这样的预准备语句条款,也欢迎使用其他依赖项或解决方案

最佳答案

这不是最佳解决方案,但它可以解决您的问题:

打开你的jtds jar文件(或者下载jtds源文件并在你的IDE中导入),找到并反编译类net.sf.log4jdbc.StatementSpy.class,

  • 在该类中添加一个静态字符串变量,我们称它为 myLastExecutedSQL
  • 编辑 reportSQL() 方法,将 sql 方法参数分配给静态变量
  • 编译新类(或重新生成 jar)并在您的项目中使用它
  • 在您的测试类中,您将能够使用 StatementSpy.myLastExecutedSQL 访问最后执行的查询

当你使用 maven 时,你必须替换 maven 主文件夹中的 jar

这样做的缺点是您不能在多线程环境中使用它,但它可以解决问题。

我希望它足够清楚

关于java - 无法使用 driverspy 获取查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589859/

相关文章:

java - 在java中写入XML文件时出错

java - 我从 OutputStreamWriter() 收到 android.os.NetworkOnMainThreadException 和另一个未知异常

java - 为什么这段 Java 代码会触发 ConcurrentModificationException?

java - 从 jdbc/SQL Server 2005 读取希腊文本并用 servlet 显示它

tomcat - 无法取消部署 Tomcat 7 中的 Web 应用程序

java - java 和 openssl 签名不匹配

sql-server - Weka如何连接到MSSQL服务器

CICS 中的 Java - 类型 2 JDBC 连接给出错误 SQLCODE = -922,SQLSTATE = 42505,错误标记 = PLAN ACCESS;00F30034

java - 如何在log4j2中手动代码配置中为appender添加级别?

apache - 使用log4j为内部日志配置tomcat!