如何通过JDBC将毫秒级时间戳插入Oracle的Date类型字段
把自纪元以来的毫秒数插入Oracle Date字段的正确姿势
看起来你已经迈出了把毫秒数转成日期的第一步,但还差关键的一步——Oracle的DATE字段需要用JDBC标准的日期类型来适配,直接用java.util.Date容易出现映射问题。下面给你两种靠谱的解决方案:
方法一:用java.sql.Timestamp保留毫秒精度(推荐)
Oracle的DATE类型其实支持存储毫秒信息(只是部分工具展示时会隐藏),用Timestamp可以完整传递毫秒级的时间:
String query = "insert into tempp values(? , ?)"; ps = conn.prepareStatement(query); String longString1 = "1521142078000"; String longString2 = "1521566664738"; // 更高效的字符串转long写法 long longType1 = Long.parseLong(longString1); long longType2 = Long.parseLong(longString2); // 把毫秒数转成JDBC标准的Timestamp类型 java.sql.Timestamp ts1 = new java.sql.Timestamp(longType1); java.sql.Timestamp ts2 = new java.sql.Timestamp(longType2); // 用setTimestamp方法绑定参数 ps.setTimestamp(1, ts1); ps.setTimestamp(2, ts2); ps.executeUpdate();
方法二:用java.sql.Date只保留日期部分(无毫秒)
如果你的业务场景不需要毫秒精度,只需要日期信息,可以用这种方式(会自动截断毫秒部分):
String query = "insert into tempp values(? , ?)"; ps = conn.prepareStatement(query); String longString1 = "1521142078000"; String longString2 = "1521566664738"; long longType1 = Long.parseLong(longString1); long longType2 = Long.parseLong(longString2); // 转成JDBC标准的Date类型 java.sql.Date sqlDate1 = new java.sql.Date(longType1); java.sql.Date sqlDate2 = new java.sql.Date(longType2); // 用setDate方法绑定参数 ps.setDate(1, sqlDate1); ps.setDate(2, sqlDate2); ps.executeUpdate();
小提醒
你之前用的java.util.Date是Java通用日期类型,JDBC驱动对它的映射规则可能不稳定,而java.sql.Timestamp和java.sql.Date是专门为数据库交互设计的类型,能确保和Oracle的DATE字段正确适配。另外,Long.parseLong()比new Long(longString).longValue()更高效,也是现在更常用的写法~
内容的提问来源于stack exchange,提问作者datastax




