2015-01-07 2 views
0

В MY_TABLE, когда поле ORD_AMT обновляется, LST_UPDT_TS также обновляется с помощью current_timestamp. Представлено следующим запросом:Как использовать CURRENT_TIMESTAMP в JDBC (Oracle DB)

UPDATE MY_TABLE 
SET ORD_AMT = 50, LST_UPDT_TS = CURRENT_TIMESTAMP 
WHERE ORD_ID = 'ORD_123' 

Мне нужно реализовать этот бизнес JDBC код, а мой веб-сервер и сервер БД являются разница часовых поясов. Если я передаю Date(). GetTime() в JDBC, это текущий веб-сервер, но мне нужно текущее время сервера БД.

Есть ли способ для передачи CURRENT_TIMESTAMP так:

preparedStatement = dbConnection.prepareStatement(updateOrderSql); 
preparedStatement.setFloat(1, 50); 
preparedStatement.setTimestamp(2, Timestamp.CURRENT_TIMESTAMP); 
preparedStatement.setString(3, 'ORD_123'); 
preparedStatement.executeUpdate(); 

Спасибо за вашу помощь.

+2

Вы не можете передать 'CURRENT_TIMESTAMP' в качестве параметра. Просто сохраните ключевое слово в своем SQL и не замените его на '?' –

ответ

0

Вместо передачи текущего параметра временной метки к оракулу, вы можете использовать SYSTIMESTAMP, как показано ниже

UPDATE MY_TABLE 
SET ORD_AMT = 50, LST_UPDT_TS = SYSTIMESTAMP 
WHERE ORD_ID = 'ORD_123' 

в конечном счете, и может быть таким же, если FRONT END сервер и DB сервер находятся в одной машине, я имею в виду архитектуру одноуровневого уровня. Если нет, вы можете ввести его в строку и сохранить его в таблице с varchar2 Тип данных.

+0

Я бы почти никогда не рекомендовал хранить дату/временную метку как varchar, вы можете передать его как строку, хотя вызов соответствующей функции для передачи через dbms, то есть ' LST_UPT_TS = to_date (: dateAsString, 'DD.MM.YYYY') ' – evilive

Смежные вопросы