java.lang.IllegalArgumentException:无效格式:“ dd-MM-yyyy HH:mm:ss”

时间:2019-05-06 15:20:16

标签: java oracle11g

我正在尝试将日期插入db Oracle列。数据类型为日期。我从Web api接收到org.threeten.bp.OffsetDateTime并将其转换为org.joda.time.DateTime。查询读取所有参数,并且其中一个包含此值to_date('“ + date.parse(” dd-MM-yyyy HH:mm:ss“)+”','DD-MM-YYYY HH24:MI:SS ')。

我正在调试问题,当达到查询的此值时to_date('“ + date.parse(” dd-MM-yyyy HH:mm:ss“)+”','DD-MM-YYYY HH24:MI:SS'),我得到以下消息:“ java.lang.IllegalArgumentException:无效格式:” dd-MM-yyyy HH:mm:ss“”。

因为这是OffsetDateTime格式2019-02-20T09:45:35.388209800Z,所以我需要以“ dd-MM-yyyy HH:mm:ss”格式更改日期。

    String date = null;
    String[] date1=t.getUtcDate().toLocalDate().toString().split("-");

            for(i=date1.length-1; i>=0; i--) 
            {
                if(date==null) {
                date=date1[i];

                }
                else
                {
                    date=date+"-"+date1[i];

                }
            }
            System.out.println(date);


            String time=t.getUtcDate().toLocalTime().toString();

            String time1=time.substring(0, time.indexOf("."));
            System.out.println(time1);
            String dateTime=date+" "+time1;
            System.out.println(dateTime);
            DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MM-yyyy HH:mm:ss");

            DateTime dt = formatter.parseDateTime(dateTime);


 String query = "INSERT INTO TABLENAME (DATE)"
                                      + " values (to_date('"+date.parse("dd-MM-yyyy HH:mm:ss")+"','DD-MM-YYYY HH24:MI:SS'))";

没有这部分代码to_date('“ + date.parse(” dd-MM-yyyy HH:mm:ss“)+”','DD-MM-YYYY HH24:MI:SS'),我的查询效果很好。

2 个答案:

答案 0 :(得分:0)

  

我需要以“ dd-MM-yyyy HH:mm:ss”格式更改日期。

不,你不知道。您需要做的就是停止使用字符串串联将值插入SQL语句中。使用PreparedStatement

String query = "INSERT INTO TABLENAME (DATE) values (?)";
try (PreparedStatement stmt = conn.prepareStatement(query)) {
    stmt.setTimestamp(1, new Timestamp(dt.getMillis()));
    stmt.executeUpdate();
}

答案 1 :(得分:0)

在代码中

String query = "INSERT INTO TABLENAME (DATE)"
             + " values (to_date('"+date.parse("dd-MM-yyyy HH:mm:ss")
             +"','DD-MM-YYYY HH24:MI:SS'))";

您正在使用查询

INSERTO INTO TABLENAME (DATE) VALUES (TO_DATE('<something>', 'DD-MM-YYYY HH24:MI:SS'))

问题在于<something>不是您所期望的。

变量dateString,而不是Date

代码date.parse("dd-MM-yyyy HH:mm:ss")将其转换为Date。 如果将Date中的String对象串联起来,则将应用toString对象的Date方法,这类似于:

 Mon May 06 15:26:32 GMT 2019 

查询

INSERTO INTO TABLENAME (DATE) VALUES 
(TO_DATE('Mon May 06 15:26:32 GMT 2019', 'DD-MM-YYYY HH24:MI:SS'))

对oracle无效。