Конвертировать 7-битную закодированную строку в обычный текст

Это нигде не определено в контракте API JDBC, но если вам повезет, драйвер JDBC, о котором идет речь, может вернуть полный SQL, просто позвонив PreparedStatement#toString(). I.e.

System.out.println(preparedStatement);

По крайней мере MySQL 5.x и PostgreSQL 8.x поддерживают JDBC-драйверы. Однако большинство других драйверов JDBC его не поддерживают. Если у вас есть такой, то лучше всего использовать Log4jdbc или P6Spy .

В качестве альтернативы вы также можете написать общую функцию, которая принимает значение Connection, строку SQL и значения оператора и возвращает PreparedStatement после регистрации строки SQL и значений. Пример Kickoff:

public static PreparedStatement prepareStatement(Connection connection, String sql, Object... values) throws SQLException {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
    logger.debug(sql + " " + Arrays.asList(values));
    return preparedStatement;
}

и использовать его как

try {
    connection = database.getConnection();
    preparedStatement = prepareStatement(connection, SQL, values);
    resultSet = preparedStatement.executeQuery();
    // ...

Другой альтернативой является реализация пользовательского PreparedStatement, который обертывает (украшает) real PreparedStatement по построению и переопределяет все методы, чтобы он вызывал методы real PreparedStatement и собирал значения во всех методах setXXX() и лениво конструировал «фактическую» строку SQL когда вызывается один из методов executeXXX() (довольно много работы, но большинство IDE обеспечивает автогенераторы для методов декоратора, Eclipse делает). Наконец, просто используйте его. Это также в основном то, что P6Spy и супруги уже делают под капотами.

0
задан Mohammad Tofiq 18 January 2019 в 12:50
поделиться