2010-11-28 183 views
1

我需要将像2010-11-28这样的字符串转换为Date类型以保存在PostgreSQL数据库中。我试过这段代码,但是当我检查数据库中的结果时,两个日期都为空:Java:将字符串转换为日期

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); 

------------------------- -------编辑----------------------------

startDate和endDate是格式为yyyy- mm-dd喜欢2010-11-27。堆栈跟踪中没有任何东西(转换似乎以某种方式工作)。如果有什么我可能会知道什么是错的。转换后,日期存储在postgres数据库中。是的,我用util.Date而不是sql.Date(可能这是第一个错误)。

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

代码被简化了,但是:栈跟踪没有显示任何奇怪的东西,validStartDate和validEndDate被转换成像这样的东西Tue Nov 30 00:00:00 CET(所以不是空)。作业确实正确保存在数据库中。 sql:插入public.assignment(type,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创建。有谁知道如何解决这个问题?预先感谢您的帮助。

+0

你确定`startDate`和`endDate`正确填充? – Bozho 2010-11-28 18:05:25

+2

因此,您没有处理异常,但忽略它并继续执行代码流?你应该抛出异常!它包含有关该问题的宝贵信息。 – BalusC 2010-11-28 18:07:31

回答

1

有问题需要注意几点:

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); 
从这些问题

除此之外,您应检查以下内容:

是进入休眠模式确实节省了数据库中的Assignment

您的Hibernate映射是否正确?

您是否尝试过使用java.sql.date

什么是生成的SQL?您可以在hibernate.cfg.xml文件中使用<property name="show_sql">true</property>来启用该选项。

只有通过检查以上所有内容,您才能解决您的问题。

0

Date对象是java.util.Date对象还是java.sql.Date?我问的原因是SimpleDateFormat解析会将字符串转换为java.util.Date,但如果您将此对象与SQL数据库一起使用,我怀疑您需要后者java.sql.Date。幸运的是,它们可以很容易地转换。另外,当你尝试转换时,你的catch块会说什么?是否有任何异常被捕获?