繁体   English   中英

Oracle日期的无效年份异常

[英]Invalid year exception with Oracle Date

我正在尝试将日期保存到我的oracle数据库。

    long startTime = System.nanoTime();
    java.sql.Date startTimeDisplay = new Date(startTime);

    PreparedStatement st;
    String sql = "INSERT INTO J0T_JOB_STATUS (JST_JOB_ID, JST_JOB_CONFIGURATION_ID, JST_STATUS_CD, JST_START_TM, JST_END_TM, JST_CURR_STEP, JST_STEP_DETAILS, JST_MSG_COLLECTION) "
            + "VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
    st.setDate(4, startTimeDisplay);

这在使用HSQL而不是oracle的JUnit测试套件中可以正常工作,但是使用oracle时,我得到:

    [err] Exception in thread "Thread-15" 
    [err] java.lang.IllegalArgumentException: Invalid year value
    [err]   at oracle.sql.TIMESTAMP.getOracleYear(TIMESTAMP.java:772)
    [err]   at oracle.sql.DATE.toBytes(DATE.java:533)
    [err]   at oracle.sql.DATE.<init>(DATE.java:121)
    [err]   at oracle.jdbc.driver.OraclePreparedStatement.setDate(OraclePreparedStatement.java:8747)
    [err]   at oracle.jdbc.driver.OraclePreparedStatementWrapper.setDate(OraclePreparedStatementWrapper.java:177)
    [err]   at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.setDate(WSJdbcPreparedStatement.java:1333)
etc.

表定义:

desc J0T_JOB_STATUS
Name                     Null Type         
------------------------ ---- ------------ 
JST_JOB_ID                    VARCHAR2(50) 
JST_JOB_CONFIGURATION_ID      NUMBER       
JST_STATUS_CD                 VARCHAR2(30) 
JST_START_TM                  TIMESTAMP(6) 
JST_END_TM                    TIMESTAMP(6) 
JST_CURR_STEP                 NUMBER       
JST_STEP_DETAILS              CLOB         
JST_MSG_COLLECTION            CLOB         

根据有关System.nanoTime() Java文档(我假设使用Java7,因为您未提供Java版本):

此方法只能用于测量经过时间,并且与系统或挂钟时间的任何其他概念无关。 返回的值表示自某个固定但任意的原始时间以来的纳秒(也许是将来的时间,因此值可能为负)

链接: https//docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()

我建议改用System.currentTimeMillis()除非您想最终保留一个负数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM