我正在做一个项目,我需要在日志文件中记录查询并将这些查询也添加到我的断言语句中
我已经使用以下驱动程序构建了准备好的语句
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/