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

Java 无法使用driverspy获取查询字符串,java,jdbc,log4j,prepared-statement,jtds,Java,Jdbc,Log4j,Prepared Statement,Jtds,我正在进行一个项目,需要将查询记录在日志文件中,并将这些查询添加到assert语句中 我已经使用下面的驱动程序构建了准备好的语句 net.sf.log4jdbc.sql.jdbcapi.DriverSpy 和url jdbc:log4jdbc:sybase:Tds ........ 我使用的依赖项如下所示: <dependency> <groupId>net.sourceforge.jtds</groupId> &

我正在进行一个项目,需要将查询记录在日志文件中,并将这些查询添加到assert语句中

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

net.sf.log4jdbc.sql.jdbcapi.DriverSpy
和url

jdbc:log4jdbc:sybase:Tds ........ 
我使用的依赖项如下所示:

    <dependency>
        <groupId>net.sourceforge.jtds</groupId>
        <artifactId>jtds</artifactId>
        <version>1.3.1</version>
    </dependency>
在我的assert类中,sql应该在我的assert代码中看到如下内容:

Assert.assertTrue("Got Test "+query, true);
您能否告诉我,是否有任何方法可以在java中获取变量中的查询,目前直接查询日志到日志文件中,但我无法找到在脚本中获取它们的方法,即存储在任何变量上等


如果当前依赖项没有预先准备好的语句的规定,也欢迎使用其他依赖项或解决方案,这不是最佳解决方案,但它可以解决您的问题:

打开jtds jar文件(或下载jtds源文件并将其导入IDE),查找并反编译类net.sf.log4jdbc.StatementSpy.class

  • 在该类中添加一个静态字符串变量,我们称之为myLastExecutedSQL
  • 编辑reportSQL()方法,将sql方法参数指定给静态变量
  • 编译新类(或重新生成jar)并在项目中使用它
  • 在测试类中,您将能够使用StatementSpy.MyLasteExecutedSQL访问上次执行的查询
在使用maven时,必须替换maven主文件夹上的jar

这样做的缺点是您不能在多线程环境中使用它,但它可以做到这一点


我希望它足够清晰

非常感谢你的支持。。。我明天一定试试这个。。是的,我在用maven。。我可以重写那个类还是它是一个密封类。。。如果我能以某种方式覆盖它,那么我想它会做的。你可以在jar上覆盖它,通常我下载源代码,进行调整、编译,然后,我只是替换了jar上的类文件,就这样。这意味着没有规定我可以在源代码中重写lib函数而不触及jar本身……在这种情况下,我认为您无法重写它,特定的方法受到保护,如果您能够,父类上的方法将被其他内部类调用,它是在日志上编写查询的通用方法,需要修改jar,非常感谢DeadSpock为您提供的输入。。。现在投票支持你
Assert.assertTrue("Got Test "+query, true);