Я могу получить полный запрос, который PreparedStatement собирается выполнить? [дубликат]

9
задан Joachim Sauer 14 June 2010 в 15:36
поделиться

4 ответа

Это не предусмотрено спецификацией JDBC, но несколько драйверов JDBC позволяют toString из PreparedStatement возвращать своего рода запрос, который будет выполнен, а MySQL's Connector/J, как оказалось, имеет такое поведение (или, по крайней мере, имел несколько лет назад).

String myQuery = "select id from user where name = ?";
PreparedStatement stmt  = sqlConnection.prepareStatement(myQuery);
stmt.setString(1, "test");
System.out.println(stmt); // May do what you want!
10
ответ дан 4 December 2019 в 09:12
поделиться

На самом деле вы не можете получить запрос, который будет выполняться, но есть API-интерфейсы журналирования, которые будут регистрировать запросы к базе данных для вас, такие как log4jdbc и p6spy .

4
ответ дан 4 December 2019 в 09:12
поделиться

Я могу вам сказать, что это такое. Если вы используете MySQL 4.1 или новее с Connector / J 3.1 или новее, это будет примерно так:

PREPARE stmt FROM 'select id from user where name = ?'
SET @a = 'test'
EXECUTE stmt USING @a

Это потому, что MySQL поддерживает подготовленные операторы на стороне сервера .

(Скорее всего, он использует двоичный протокол, но этот код просто указывает на мысль)

3
ответ дан 4 December 2019 в 09:12
поделиться

Вы не можете, поскольку Java не несет ответственности за его создание. Подготовленные операторы поддерживаются в MySQL, поэтому Java отправляет фактический параметризованный SQL («выберите идентификатор пользователя, где имя =?») Прямо в MySQL вместе с параметрами

3
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: