无法使用驱动程序py

时间:2018-12-03 08:20:10

标签: java jdbc log4j prepared-statement jtds

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

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

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>

PrepareStatement示例:

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);
        }
    }

在我的assert类中,sql应该在我的assert代码中看到,例如:

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

能否请您告诉我是否还有其他方法可以在java中的变量中进行查询,当前查询直接将日志记录到日志文件中,而无论如何我都无法找到可以在脚本中获取它们的方法,即存储在任何变量等上

如果当前的依存关系没有针对预先准备好的陈述的规定,则也欢迎使用其他依存关系或解决方案

1 个答案:

答案 0 :(得分:2)

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

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

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

在使用Maven时,您将不得不替换Maven主文件夹中的jar

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

我希望足够清楚