我有一个从当前时间创建的日期,对象类型是XMLGregorianCalendar。在Java中,我可以看到我的日期有微秒,但在SQL中,它被设置为0。到底是什么问题呢?
public static XMLGregorianCalendar initializeTime(LocalDateTime localDateTime) {
try {
XMLGregorianCalendar time= DatatypeFactory.newInstance()
.newXMLGregorianCalendar(String.valueOf
(LocalDateTime.now().truncatedTo(ChronoUnit.MICROS)));
return time;
} catch (DatatypeConfigurationException var3) {
throw new RuntimeException("Execution time could not created.");
}
}
在Java中,它显示:2023-05-24T15:50:07.931456
但是在SQL中(类型是TIMESTAMP(6)),它显示如下:2023年5月24日15.50.07.931000000 PM
SQL调用,你可以在下面找到它。dummytest是一个过程,基本上是获取一个参数并将该参数插入到表中。
<select id="add_time" statementType="CALLABLE" parameterType="java.util.Map">
{call dummytest(
#{time, mode=IN, jdbcType=TIMESTAMP}
)}
</select>
程序代码:
create or replace procedure dummytest(p_timestamp TIMESTAMP) is
begin
insert into testtimestamp values (p_timestamp);
commit;
end ;
我失去了微秒的精度。我必须使用XMLGregorianCalendar,因为所有代码都是为这个API设计的。
1条答案
按热度按时间wlzqhblo1#
这个问题是通过java端的自定义处理程序解决的。
XMLGregorianCalendarWithFractionalTypeHandler的内容: