Java: конвертировать строку в дату - PullRequest
1 голос
/ 28 ноября 2010

Мне нужно преобразовать строку типа 2010-11-28 в тип даты, чтобы сохранить ее в базе данных PostgreSQL. Я попробовал этот код, но когда я проверяю результат в базе данных, обе даты равны нулю:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date validStartDate=null;
Date validEndDate=null;

    try {
        validStartDate = df.parse(startDate);
        validEndDate = df.parse(endDate);

    } catch (Exception e) {

      ...

    }

    Assigment a  = new Assignment(..., validStartDate, validEndDate);
    session.save(s);

-------------------------------- Edit -------------- --------------

startDate и endDate - это строки в формате гггг-мм-дд, например 2010-11-27. В трассировке стека ничего нет (конвертация вроде как-то работает). Если бы было что-то, я бы, наверное, знал, что не так. После конвертации даты сохраняются в базе данных postgres. Да, я использовал util.Date вместо sql.Date (возможно, это первая ошибка).

------------------------------- Edit2 --------------- ------------

Код упрощен, но: трассировка стека не показывает ничего странного, validStartDate и validEndDate конвертируются во что-то вроде этого, вт 30 ноября, 00:00:00 CET (поэтому не ноль). Назначение действительно правильно сохраняется в базе данных. Sql: вставить в public.assignment (тип, valid_start_date, valid_end_date, id) значения (5, NULL, NULL, 2). Я пытался использовать sql.Date, но безуспешно.

---------------------------- Назначение сопоставления -----------------

<hibernate-mapping>
  <class name="model.Assignment" schema="public" table="assignment">
    <id name="id" type="int">
      <column name="id"/>
      <generator class="increment"/>
    </id>


    <property name="validStartDate" type="date">
            <column name="valid_start_date" length="13" />
        </property>
        <property name="validEndDate" type="date">
            <column name="valid_end_date" length="13" />
        </property>
        <property name="type" type="integer">
            <column name="type" />
        </property>

  </class>
</hibernate-mapping>

Я использую Hibernate для сохранения пользовательских данных. Строка создается виджетом JQuery Datepicker. Кто-нибудь знает, как решить эту проблему? Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Несколько комментариев с вопросами:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date validStartDate=null;
Date validEndDate=null;

try {
    validStartDate = df.parse(startDate);
    validEndDate = df.parse(endDate);

} catch (Exception e) {
    // are there any exceptions thrown and caught here?
}

// are validStartDate and validEndDate non-null at this point? 
// is this code even executed? it won't be if an exception was thrown...
Assigment a  = new Assignment(..., validStartDate, validEndDate);

// where did this "s" come from? did you mean "session.save(a)"?
session.save(s);

Помимо этих вопросов, вы должны проверить следующее:

Действительно ли Hibernate сохраняет ваши Assignment в базе данных?

Правильны ли ваши отображения в Hibernate?

Вы пытались использовать java.sql.date?

Что такое сгенерированный SQL?Вы можете включить эту опцию, используя <property name="show_sql">true</property> в своем файле hibernate.cfg.xml.

Только путем проверки всего вышеперечисленного вы сможете решить вашу проблему.

0 голосов
/ 28 ноября 2010

Является ли объект Date объектом java.util.Date или java.sql.Date? Я спрашиваю, почему SimpleDateFormat parse преобразует String в java.util.Date, но если вы используете этот объект с базой данных SQL, я подозреваю, что вам понадобится последняя, ​​java.sql.Date. К счастью, они могут быть преобразованы довольно легко. Кроме того, что говорит ваш блок catch, когда вы пытаетесь конвертировать? Есть ли какие-то исключения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...