Невозможно получить строку запроса с использованием driverspy - PullRequest
0 голосов
/ 03 декабря 2018

Я работаю над проектом, в котором мне нужно зарегистрировать запрос в лог-файлах и добавить эти запросы к моему утверждению 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>

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 голосов
/ 09 декабря 2018

Это не оптимальное решение, но оно может решить вашу проблему:

Откройте ваш jar-файл jtds (или скачайте исходные файлы jtds и импортируйте их в вашу IDE), найдите и декомпилируйте класс net.sf..log4jdbc.StatementSpy.class,

  • добавить статическую переменную String в этот класс, назовем ее myLastExecutedSQL
  • , отредактируйте метод reportSQL (), назначьте параметр метода sql для вашей статическойпеременная
  • скомпилируйте новый класс (или создайте заново jar-файл) и используйте его в своем проекте
  • , в своем тестовом классе вы сможете получить доступ к последнему выполненному запросу с помощью StatementSpy.myLastExecutedSQL

Поскольку вы используете maven, вам придется заменить банку в домашней папке maven

Недостатком этого является то, что вы не можете использовать его в многопоточной среде, но этосделать трюк.

Надеюсь, это достаточно ясно

...