Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用to_Date以自定义格式存储日期时出错_Sql_Jdbc_Oracle11gr2_To Date - Fatal编程技术网

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