我需要将类似2010-11-28的String转换为Date类型,以保存在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);
--------------------------------编辑-------------- --------------
startDate和endDate是格式为yyyy-mm-dd的字符串,如2010-11-27。堆栈跟踪中没有任何内容(转换似乎在某种程度上有效)。如果有什么我可能会知道什么是错的。转换后,日期存储在postgres数据库中。是的,我使用了util.Date而不是sql.Date(可能这是第一个错误)。
------------------------------- Edit2 --------------- ------------
代码被简化但是:堆栈跟踪没有显示任何奇怪的内容,validStartDate和validEndDate被转换为类似于Tue Nov 30 00:00:00 CET(因此不为null)。 Assignment确实正确保存在数据库中。 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来保存用户数据。 String由JQuery小部件Datepicker创建。有谁知道如何解决这个问题?在此先感谢您的帮助。
答案 0 :(得分: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);
除了这些问题,您应该检查以下内容:
Hibernate真的将Assignment
保存在数据库中吗?
你的Hibernate映射是否正确?
您是否尝试使用java.sql.date
?
生成的SQL是什么?您可以使用<property name="show_sql">true</property>
文件中的hibernate.cfg.xml
启用该选项。
只有通过检查以上所有内容,您才能解决问题。
答案 1 :(得分:0)
Date对象是java.util.Date对象还是java.sql.Date?我问的原因是SimpleDateFormat解析会将String转换为java.util.Date,但如果你将这个对象与SQL数据库一起使用,我怀疑你需要后者java.sql.Date。幸运的是,它们可以很容易地转换。另外,当你尝试转换时,你的阻止块会说什么?是否有任何异常被捕?