У меня есть поле столбца с именем StartDate
в StartDate
данных MySQL of Date
. В своем приложении я определил способ отображения текущей даты на моей странице следующим образом.
String today = CoreUtil.parseDate(new Date());
Это в основном возвращает дату в YYYY-MM-DD
и сохраняет ее в виде строки, что нормально.
Теперь я хотел бы передать это значение в функцию, которая вставляет значение в столбец StartDate
.
Функция, которую я объявил, выглядит следующим образом:
public void insert_update(String nodeid,String ts,Date startdt,Date enddt,int enable)
Я вызываю эту функцию и передаю ей значение today
как показано ниже:
fileFacade.insert_update(...,....,today,....,...);
Теперь я не эксперт в этой области данных, и, видя, что она не позволит мне передать значение, как я определил его как параметр Date, как мне решить эту проблему?
Должен ли я преобразовать его обратно в формат даты и передать значение или MySQL разрешает вставку строкового значения в столбец типа данных Date?
Я просто хочу сохранить значение в моей таблице в YYYY-MM-DD
.
редактировать:
Моя функция:
public void insert_update(String nodeid,String ts,Date startdt,Date enddt,int enable){
try {
// UrlLink attr = em.find(UrlLink.class,n);
String sql="UPDATE urllink SET STARTDT="+startdt+",ENDDT="+enddt+",ENABLE="+enable+"WHERE URL='f0="+nodeid+"&ts="+ts + "'";
em.createNativeQuery(sql).executeUpdate();
}catch (Exception e) {
e.printStackTrace();
}
}
Вы не должны пытаться преобразовать String
в Date
, чтобы вставить ее в таблицу. Вы можете использовать тип date
как при использовании preparedStatement
, например:
Date date = new Date();
PreparedStatement pStmt = connection.prepareStatement("<query>");
pStmt.setDate(1, date);
Вот этот Javadoc.
Обновить
Если целью здесь является отображение даты в указанном формате, то я настоятельно рекомендую сохранить дату как DATE
в MySQL, чтобы отформатировать ее при запросах. Решение о том, как мы храним дату, не должно зависеть от того, как она должна отображаться во внешнем интерфейсе, поскольку нам может потребоваться отображение разных форматов даты в нескольких пользовательских интерфейсах.
Передайте строковую дату в параметре метода вместо типа Дата, а затем отформатируйте этот тип даты следующим образом:
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd",Locale.ENGLISH);
formatter.parse(date)
SimpleDateFormat
. По крайней мере, не в качестве первого варианта. И не без оговорок. Сегодня у нас намного лучше в java.time
, современном API даты и времени Java и его DateTimeFormatter
. А также сохраняйте и передавайте дату в LocalDate
, а не в String
.
YYYY-MM-DD