首页 > 解决方案 > 如何使用 oracle 中的 where 子句查询从 oracle 获取 TIMESTAMP WITH TIME ZONE 列值和行?

问题描述

我有一个列类型为 TIMESTAMP WITH TIME ZONE 的表。我想读取行 SELECT * FROM "TEST_TIMESTAMP_WTZ_t2" where time_with_zone = ?;

String d = "2021-10-18 16:11:10.0 Europe/Paris";
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.n VV");
ZonedDateTime tm = ZonedDateTime.parse(d, dtf2); 
// OffsetDateTime odt =OffsetDateTime.parse(d,dtf2); 
// String z = tm.getZone().getId();
// System.out.println(tm.getZone());
// ThIS IS THE MAIN CODE 
// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
// Calendar c = Calendar.getInstance(); 
// c.setTime(dateFormat.parse(d));
// c.setTimeZone(TimeZone.getTimeZone(z)); 
// Date date = dateFormat.parse(d); 
// String parsed = dateFormat.format(date); 
// Timestamp timestamp = new Timestamp(c.getTimeInMillis()); 
// Datum dtm = new TIMESTAMPTZ(con, new java.sql.Timestamp(c.getTimeInMillis()), c); 
// Datum dtm = new TIMESTAMPTZ(con, new java.sql.Timestamp(c.getTimeInMillis()), tm.getZone());
// PreparedStatement ps = con.prepareStatement(query);
// ps.setObject(1,dtm); 
// ResultSet rs = ps.executeQuery();
// Calendar c = Calendar.getInstance(); 
// while ((rs.next())) { 
//  System.out.println(rs.getObject(2)); 
// }

日期存在于数据库中,但我无法根据 where 子句获取。

有人可以帮我纠正我做错了什么吗?

标签: javadatetimetimestamptimestamp-with-timezonedatetimeformatter

解决方案


我建议您不要将现代日期时间 API 与传统 API 混合使用。java.util日期时间 API 及其格式化 API已SimpleDateFormat过时且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *

使用java.time现代日期时间 API,下面给出的是如何从类型字段中提取数据TIMESTAMP WITH TIMEZONE

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE <some condition>");
while (rs.next()) {
    // Assuming the column index of columnfoo is 1
    OffsetDateTime odt = rs.getObject(1, OffsetDateTime.class));
    System.out.println(odt);
}
rs.close();
st.close();

哪里columnfoo是类型,TIMESTAMP WITH TIMEZONE


* 如果您正在为一个 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring 检查可用的 Java 8+ API。请注意,Android 8.0 Oreo 已经提供java.time.


推荐阅读