Sql 使用to_Date以自定义格式存储日期时出错
目标:Sql 使用to_Date以自定义格式存储日期时出错,sql,jdbc,oracle11gr2,to-date,Sql,Jdbc,Oracle11gr2,To Date,目标: 我想以dd/MM/yyyy格式在数据库中存储日期 我首先使用DateFormat对其进行格式化,结果将其更改为String数据类型,然后尝试使用to_date函数将其转换回日期数据类型,但它被存储为19-DEC-12格式,即dd MON yy格式 代码: 日期不会以您在任何数据库中指定的格式保存(除非使用字符串字段)。大多数数据库系统将日期时间值存储为“双精度”值 您应该将日期放入数据库,并在从数据库获取数据或向用户显示数据时担心格式问题。我认为您误解了日期在Oracle中的实际工作方式
dd/MM/yyyy
格式在数据库中存储日期DateFormat
对其进行格式化,结果将其更改为String
数据类型,然后尝试使用to_date
函数将其转换回日期数据类型,但它被存储为19-DEC-12
格式,即dd MON yy
格式日期不会以您在任何数据库中指定的格式保存(除非使用字符串字段)。大多数数据库系统将日期时间值存储为“双精度”值
您应该将日期放入数据库,并在从数据库获取数据或向用户显示数据时担心格式问题。我认为您误解了日期在Oracle中的实际工作方式。
日期不是像“2012年12月19日”或“2012年12月19日”那样存储的,而是以7字节的形式存储的 有关更多详细信息,请参阅 如果选择日期列,则使用NLS\U date\U格式对其进行格式化。 这是用于格式化这些7字节的默认掩码 当然,如果使用自定义格式掩码,如
to_char(sysdate,'YYYY-MM-DD')
默认的NLS_-DATE_格式将被忽略
正如我在上面的评论中读到的
实际上,我正在尝试以正确的格式存储,因为我正在使用JTable在一些其他表单上显示数据库表的纯副本,因此存储日期的日期格式将直接显示。我不想在我大量的Jtables上转换日期格式,这可能会使我随着表格的增加而一次又一次地更改日期格式 我建议您还保存用于在DB表的另一列中格式化日期的特定格式掩码。
在JTable中显示日期之前,请使用此掩码使用
DateFormat
对其进行格式化。实际上,我正在尝试以正确的格式存储数据,因为我正在使用JTable在其他一些表单上显示数据库表的纯副本,以便直接显示存储日期的日期格式。我不想在我大量的JTable上转换日期格式,这可能会使我随着我的表的增加而一次又一次地更改日期格式。我不熟悉JTable,但我仍然相信您不必担心插入数据的格式,而应该担心在JTable中显示数据的格式。这是因为无论您做什么,数据库引擎都不会保留有关插入数据的格式的任何信息。它只是将日期保留为本机值。但由于我不熟悉JTable,我不会坚持:)只要我们直接告诉我们java.sql.Date
,您就会混淆表示格式和存储格式。
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date dob=JDateChooser.getDate();
java.sql.Date dobloc=new java.sql.Date(dob.getTime());
String dobloc1=df.format(dobloc);
String sql="INSERT INTO ADMIN.DEPARTMENT(date_of_birth) VALUES (to_date(?,'dd/MM/yyyy'))"
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, dobloc1);