Я использую запросы как
"UPDATE MAILSCH.MESSAGE "
+ "SET IDFOLDER=?, SUBJECT=?, CONTENT=?, CREATIONTIME=?, AD_FROM=?, AD_TO=?, STATUS=? "
+ "WHERE IDMESSAGE=?";
Я могу пропустить IDFOLDER, не изменяя запрос?
К сожалению, нет. Позиционные параметры ('?') являются именно такими, идентифицированными по их позиции или порядку появления в запросе. Если вы удалите 'IDFOLDER=?', то присвоите остальной части запроса неправильные параметры и, возможно, получите исключение, поскольку количество присвоенных параметров не соответствует ожидаемому в запросе.
Я предполагаю, что вы не можете изменить исходный код, так как это самый простой путь - изменить SQL, а затем параметры JDBC, чтобы они совпадали. Если вам нужно использовать то же количество параметров, вы можете написать запрос таким образом, чтобы не менять значение IDFOLDER, но использовать первый параметр.
SET IDFOLDER=CASE ISNULL(?) WHEN 0 THEN IDFOLDER ELSE IDFOLDER END
Если ваш драйвер JDBC поддерживает именованные параметры, это может дать вам более чистую альтернативу.
Нет, вам придется написать второй запрос, который не включает столбец IDFOLDER. Все параметры должны быть связаны.
В javadoc прямо не сказано, что нельзя, но когда я попробовал, я получил исключение, подобное этому:
java.sql.SQLException: Parameter not set
Нет, не можете. Вам нужно условно вставить эту часть SQL в строку SQL, когда это необходимо.