Как установить формулу в JDBC PreparedStatement - PullRequest
3 голосов
/ 27 июня 2011

У меня есть PreparedStatement, который я использую для вставки группы строк с большим количеством данных столбцов.Однако для одного из столбцов (метка времени), если значение равно нулю, я хочу, чтобы оно выполнялось на сервере getDate().

Я понимаю, что я мог бы просто сделать new Date(), но это не совсем такбудет работать, потому что из-за устаревших отчетов он должен точно соответствовать другому столбцу, в который автоматически вставлено значение.

Допустим, я не могу изменить схему и добавить значение по умолчанию в столбец.

Можно ли каким-либо образом установить формулу в качестве параметра в PreparedStatement?

Редактировать, чтобы добавить: По сути, это то, что в настоящее время:

PreparedStatement statement = connection.prepareStatement("insert into row (name, starttime) values (?, ?)")
statement.setString(1, name);
statement.setDate(2, date);

Что яхочу, что-то вроде:

PreparedStatement statement = connection.prepareStatement("insert into row (name, starttime) values (?, ?)")
statement.setString(1, name);
if(date != null)
  statement.setDate(2, date);
else
  statement.setFormula(2, "getdate()");

Я понимаю, что:

if(date == null)
  date = new Date();

по сути то же самое, но в нашем случае это действительно не так.

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Работает ли просто подготовка заявления в форме

insert into row(name, starttime)
   values(?, coalesce(?, getdate())

?и затем установка нулевого 2-го параметра должна вызвать вызов getdate ()?

3 голосов
/ 27 июня 2011

Единственный вариант, который я могу придумать, поскольку вы не можете изменить схему, - это иметь 2 подготовленных оператора: один с getdate () по умолчанию в запросе, а другой - с параметром.Тогда вы можете просто сделать что-то вроде:

PreparedStatement ps = (date == null) ? prepareWithDefault : prepareWithoutDefault;

// Set all variables //

if (date != null) {
  ps.setDate(date);
}

ps.execute();
...