You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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.Timestampjava.sql.Date是专门为数据库交互设计的类型,能确保和Oracle的DATE字段正确适配。另外,Long.parseLong()new Long(longString).longValue()更高效,也是现在更常用的写法~

内容的提问来源于stack exchange,提问作者datastax

火山引擎 最新活动