Как вставить ПРОШЛЫЕ даты в MySQL как Datetime?

#java #mysql #datetime

#java #mysql #datetime

Вопрос:

 if(sqlData.get(i) != null){
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
java.sql.Timestamp myDate = new java.sql.Timestamp(dateFormat.parse(sqlData.get(i)).getTime());
preparedStatement.setTimestamp(i 1, myDate);
  

Я не уверен, что я делаю неправильно, и я продолжаю получать «java.text.ParseException: неразрешимая дата:» в 3-й строке.

Это даты, которые я извлек из базы данных и установил в прошлом.

 System.out.println(sqlData.get(i));
  

распечатывается: 2014-04-19 05:48:22

Комментарии:

1. Похоже, проблема связана со sqlData.get(i) строкой, которая, возможно, не соответствует указанному вами формату даты. Выведите sqlData.get(i) значение для проверки.

2. Исключение не потому, что дата прошла. Это потому sqlData.get(i) , что возвращает дату, которой нет в "yyyy/MM/dd HH:mm:ss" формате. проверьте каждое из значений в этом списке, чтобы найти значение с неправильным форматом. Также, если даты взяты из базы данных, вам может быть лучше использовать их как Date or Timestamp , а не a String .

3. @Nivas я на 100% уверен, что SQLData.get(i) возвращает строку в правильном формате.

4. @user3521471 Можете ли вы распечатать (sysout) даты и опубликовать здесь дату, которая вызывает исключение?

5. @user3521471 … и формат другой :-). У вас есть / разделитель дат, а дата имеет -

Ответ №1:

 java.text.ParseException: Unparseable date
  

выбрасывается, dateFormat.parse( когда переданная ему строка не имеет того же формата, что и указанный шаблон.

Также обратите внимание, что вы не опубликовали все сообщение об исключении (всю строку). Это было бы

 java.text.ParseException: Unparseable date:2014-04-19 05:48:22
  

В вашем случае

2014-04-19 05:48:22 не в формате "yyyy/MM/dd HH:mm:ss"

Ваша строка шаблона должна быть

 yyyy-MM-dd HH:mm:ss    Note the - instead of /
  

Комментарии:

1. Вау. Я чувствую себя так глупо. Я потратил около 2 часов, пробуя различные методы правильной вставки этого. Еще одна пара глаз всегда полезна, спасибо.

Ответ №2:

Вот пример синтаксического анализа даты и последующего создания из нее временной метки. Это было тестирование и работает, поэтому, если вы столкнетесь с какими-либо ошибками, это может иметь какое-то отношение к имеющимся у вас данным, а не к самому коду.

         String dateString = "1999/10/24 10:24:99";
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date dateObj = dateFormat.parse(dateString);
        Timestamp timeStamp = new Timestamp(dateObj.getTime());