簡體   English   中英

嘗試使用jdbc,SimpleDateFormat插入數據庫時​​日期中的年份不正確

[英]Incorrect year in the date when trying to insert in database using jdbc, SimpleDateFormat

我一直在嘗試使用JDBC SimpleDateFormat API將日期插入Oracle數據庫。 當我通過日期作為“ 2016-07-24”時,它插入的是“ 24-JUL-24”,這是錯誤的(年份是錯誤的),它應該是“ 24-JUL-16”。 這是第n次發生一次。 盡管我嘗試反復插入數據,但無法調試代碼。 任何人都可以參考下面的代碼,數據庫模式和日期格式,如果我在任何地方出錯,請讓我知道。 謝謝。

DAO計划

    package com.oog.big.database;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import com.oog.big.database.DBConnection;
    import java.text.SimpleDateFormat;

    public class ItemDetailsDAO {
    // format for date  
    public static final SimpleDateFormat transactionDateFormat = new SimpleDateFormat(
            "yyyy-MM-dd");
    public static transient final SimpleDateFormat requestDateTimeFormat = new SimpleDateFormat(
            "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    private static final String insertTableSQL = "INSERT INTO ITEM_DETAILS ("
            + "    ITEM_ID                    ,"
            + "    SRV_NAME               ,"
            + "    INS_TYPE            ,"
            + "    REQ_CONTEXT            ,"
            + "    STATUS_FLAG     ,"
            + "    CHL                    ,"
            + "    TRANSACTION_DATE           ,"
            + "    REQ_DATETIME           ,"
            + "    FLAG          )" + "values(?,?,?,?,?,?,?,?,?)";

    public static void save() throws Exception {

        Connection con = null;
        PreparedStatement stmt = null;
        try {
            con = DBConnection.getConnection();
            con.setAutoCommit(true);

                stmt = con.prepareStatement(insertTableSQL);
                stmt.setInt(1, 1256);
                stmt.setString(2, "DD");
                stmt.setString(3, "OL");
                stmt.setString(4, "DP");
                stmt.setString(5, "");
                stmt.setString(6, "FF");
                /** Incorrect Date **/
                stmt.setDate(
                        7,
                        new java.sql.Date(transactionDateFormat.parse(
                                "2016-07-24").getTime()));
                stmt.setDate(
                        8,
                        new java.sql.Date(requestDateTimeFormat.parse(
                                "2016-08-02T16:56:01.764-04:00").getTime()));
                stmt.setString(9, "N");
                stmt.execute();
                stmt.close();
                System.out.println("Completed!!");

            } catch (Exception e) {
            System.out.println("DB Error: "+e);
        }
    }
}

ITEM_DETAILS架構

CREATE TABLE OYD.ITEM_DETAILS
  (
    ITEM_ID                    INTEGER NOT NULL,
    SRV_NAME               VARCHAR2(5) DEFAULT NULL,
    INS_TYPE            VARCHAR2(3) DEFAULT NULL,
    REQ_CONTEXT            VARCHAR2(3) DEFAULT NULL,
    REQ_DATETIME           TIMESTAMP DEFAULT NULL,
    STATUS_FLAG     VARCHAR2(2) DEFAULT NULL,
    CHL                    VARCHAR2(2) DEFAULT NULL,
    TRANSACTION_DATE           DATE DEFAULT NULL,
    FLAG          VARCHAR2(1) DEFAULT NULL,
    LAST_UPDATE_TIMESTAMP      TIMESTAMP DEFAULT SYSTIMESTAMP,
    CONSTRAINT PK_ITEM_DETAILS PRIMARY KEY (ITEM_ID)
  )
PARTITION BY RANGE (LAST_UPDATE_TIMESTAMP) INTERVAL (NUMTODSINTERVAL(1,'DAY'))
(
PARTITION P_ITEM_DETAILS VALUES LESS THAN (TO_DATE('07-MAR-2016','DD-MON-YYYY'))
)PARALLEL;

規格:

  • 爪哇SE8
  • Oracle 12c數據庫
  • JDBC連接器:ojdbc7-12.1.0.1.0.jar

除了使用SimpleDateFormat格式化日期外,還可以在SQL中使用Oracle的date函數。

private static final String insertTableSQL = "INSERT INTO ITEM_DETAILS ("
        + "    ITEM_ID,"
        + "    SRV_NAME,"
        + "    INS_TYPE,"
        + "    REQ_CONTEXT,"
        + "    STATUS_FLAG,"
        + "    CHL,"
        + "    TRANSACTION_DATE,"
        + "    REQ_DATETIME,"
        + "    FLAG)" + "values(?,?,?,?,?,?,TO_DATE(?,'DD-MON-RR'),TO_DATE(?,'DD-MON-RR'),?)";

public static void save(){
//.........
smtp.setString(7,"24-07-2016");
smtp.setString(8,"02-8-2016");
//.........

您甚至可以在TO_DATE()函數中格式化時間(hh:mm:ss)來存儲時間戳。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM