将通过 JDBC 检索到的 java.sql.Date 值转换为 java.time.LocalDate? [复制]
Posted
技术标签:
【中文标题】将通过 JDBC 检索到的 java.sql.Date 值转换为 java.time.LocalDate? [复制]【英文标题】:Converting java.sql.Date values retrieved via JDBC into java.time.LocalDate? [duplicate] 【发布时间】:2015-08-05 09:02:37 【问题描述】:我正在尝试使用 UCanAccess 从 Microsoft Access 数据库中检索日期信息。我需要将它放在 tableview 的 LocalDate 列中,我正在这样做
Date date = res.getDate(3);
LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
但这给我带来了两个问题:
第一个是它给出了 NullPointerException 因为有时日期可能为空,所以我想知道是否有办法解决这个问题。
第二个是我替换的时候
Date date = res.getDate(3);
LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
与
Date date = new Date(2015-07-01);
LocalDate dateEchantillonnage = LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
它总是将日期显示为:1970-01-01
【问题讨论】:
这看起来与 javafx 无关?对于 Date 到 LocalDate 的转换,请参阅***.com/q/21242110/203657 好的。我不确定@kleopatra 您可以检查您的 JDBC 驱动程序是否支持java.time
-package: 的 JDBC 4.2 转换:例如 getObject(idx, LocalDate.class)
。但支持因驱动程序而异。
@MarkRotteveel - 好建议。但是,我只是用 UCanAccess 3.0.0 尝试过,不幸的是它不起作用。
附注new Date(2015-07-01)
与 new Date(2007)
(2015 - 7 - 1 = 2007) 相同,即 epoch 后 2007 毫秒,或 1970-01-01 00:00:02.007 UTC
【参考方案1】:
Optional<LocalDate> dateEchantillonnage = date == null
? Optional.empty()
: Optional.of(date.toLocalDate());
【讨论】:
【参考方案2】:修复 NPE:
Date date = res.getDate(3);
LocalDate dateEchantillonnage = date == null
? null
: LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
修复日期总是 1970-01-01:
Date date = Date.valueOf("2015-07-01"); // You passed an int 2015-07-01 = 2007 :)
LocalDate dateEchantillonnage = date == null
? null
: LocalDate.parse( new SimpleDateFormat("yyyy-MM-dd").format(date) );
【讨论】:
【参考方案3】:以下代码适用于我在 JDK 1.8.0_51 下的 UCanAccess 3.0.0:
public static void main(String[] args)
String dbFilePath = "C:/Users/Public/UCanAccessDemo.accdb";
String connUrl = "jdbc:ucanaccess://" + dbFilePath;
try (Connection conn = DriverManager.getConnection(connUrl))
String sql = "SELECT Date1 FROM DateTest ORDER BY ID";
try (Statement st = conn.createStatement())
try (ResultSet rs = st.executeQuery(sql))
while (rs.next())
LocalDate dateEchantillonnage = null;
try
dateEchantillonnage = rs.getDate(1).toLocalDate();
catch (NullPointerException npe)
// do nothing
System.out.println(dateEchantillonnage);
catch (Exception e)
e.printStackTrace(System.err);
【讨论】:
以上是关于将通过 JDBC 检索到的 java.sql.Date 值转换为 java.time.LocalDate? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JDBC ResultSet 检索为 ArrayList?
如何将通过 Timer.periodic 从 API 检索到的数据集成到 Flutter Cubit 项目中
使用 swift 将 JSON 检索到的 int32 解析为核心数据类