#java #spring #jdbc
#java #весна #jdbc
Вопрос:
Я пишу небольшое приложение spring, которое имеет функциональность jdbc в контексте следующего кода…
У меня есть следующая java для настройки строки запроса SQL :
String sql =
"SELECT "
" a.Id, "
" a.USER_ID ", "
" a.LAST_UPDATED "
"from "
" Schema.AwesomeTable a "
"where "
" a.LAST_UPDATED >= ?";
и я пытаюсь использовать объект date (давайте просто представим, что я использую текущую дату, чтобы этот вопрос оставался кратким) :
Date myDate = new Date(); // This is a java.util.Date
и я вызываю запрос следующим образом :
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, new Object[]{myDate});
Когда я запускаю это — я получаю эту ошибку :
2019-04-08 23:17:58 - Setting SQL statement parameter value: column index 1, parameter value [Tue Apr 08 23:17:58 CDT 2019], value class [java.util.Date], SQL type unknown
Мне действительно не помешала бы помощь — я везде искал Google, и я нашел НЕКОТОРУЮ информацию, но я не видел ничего, что я, кажется, мог бы понять.
Комментарии:
1. Попробуйте обернуть это в java.sql.Date.
Ответ №1:
Вы могли бы обернуть свой параметр java.sql.Date
или использовать:
import java.util.Date;
import java.time.LocalDate;
LocalDate dateTime = // some date here
Date startDate = Date.from(dateTime.atStartOfDay(ZoneId.systemDefault()).toInstant());
Комментарии:
1. Спасибо, но когда я это делаю, он на самом деле просто вылетает и выдает недопустимый тип столбца, к сожалению:(
Ответ №2:
Вы не можете напрямую использовать myDate
переменную типа java.util.Date
в своем sql-запросе
Date myDate = new Date(); // This is a java.util.Date
вы должны преобразовать его в java.sql.Date
тип, который вы можете сделать следующим образом:
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime());
после чего вы можете вызвать запрос следующим образом:
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql,sqlDate);
который будет работать, как ожидалось.
Комментарии:
1. Видите, я на 100% думал, что это может сработать именно так, но когда я это делаю, я все равно получаю ту же ошибку — за исключением того, что тип изменен следующим образом: Установка значения параметра SQL statement: индекс столбца 1, значение параметра [2019-04-09], класс значений [java.sql.Date], SQLтип неизвестен Тип столбца «Дата», и это oracle db
2. oracle по умолчанию принимает дату в следующем формате: вставить в таблицу (date_column) значения (’31-oct-02′);
3. вы можете использовать функцию to_date от Oracle:
insert into table (date_column) values (to_date('023110', 'YYDDMM'));
лучше преобразовать дату в формат *** oracles по умолчанию ***, чем использовать to_date
Ответ №3:
** LocalDate может быть передан как строка непосредственно в инструкции prepard **
jdbcTemplate.query(selectSqlQuery,
ps -> {
ps.setString(1, searchDate.toString());
}, new RowMapperForOutput());
Запрос:
выберите * из таблицы1, где date(date_column)= ?;