Подготовленный оператор. Я могу пропустить параметр?

Я использую запросы как

"UPDATE MAILSCH.MESSAGE "
            + "SET IDFOLDER=?, SUBJECT=?, CONTENT=?, CREATIONTIME=?, AD_FROM=?, AD_TO=?, STATUS=? "
            + "WHERE IDMESSAGE=?";

Я могу пропустить IDFOLDER, не изменяя запрос?

6
задан Andrei N 25 May 2010 в 09:49
поделиться

4 ответа

К сожалению, нет. Позиционные параметры ('?') являются именно такими, идентифицированными по их позиции или порядку появления в запросе. Если вы удалите 'IDFOLDER=?', то присвоите остальной части запроса неправильные параметры и, возможно, получите исключение, поскольку количество присвоенных параметров не соответствует ожидаемому в запросе.

Я предполагаю, что вы не можете изменить исходный код, так как это самый простой путь - изменить SQL, а затем параметры JDBC, чтобы они совпадали. Если вам нужно использовать то же количество параметров, вы можете написать запрос таким образом, чтобы не менять значение IDFOLDER, но использовать первый параметр.

SET IDFOLDER=CASE ISNULL(?) WHEN 0 THEN IDFOLDER ELSE IDFOLDER END

Если ваш драйвер JDBC поддерживает именованные параметры, это может дать вам более чистую альтернативу.

3
ответ дан 9 December 2019 в 22:30
поделиться

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

4
ответ дан 9 December 2019 в 22:30
поделиться

В javadoc прямо не сказано, что нельзя, но когда я попробовал, я получил исключение, подобное этому:

java.sql.SQLException: Parameter not set
0
ответ дан 9 December 2019 в 22:30
поделиться

Нет, не можете. Вам нужно условно вставить эту часть SQL в строку SQL, когда это необходимо.

4
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

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