我正在尝试将日期插入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'),我的查询效果很好。
答案 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>
不是您所期望的。
变量date
是String
,而不是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无效。