如何处理 DBUtil 中的日期类型值
Posted
技术标签:
【中文标题】如何处理 DBUtil 中的日期类型值【英文标题】:How do I handle Date type value in DBUtil 【发布时间】:2018-12-12 05:42:52 【问题描述】:我正在设置值以在我的 DBUtil 文件中发送查询,但是两个值:开始、结束 - 是 html5 表单和 mysql DB 中的日期类型值。设置时如何在我的 DBUtil 文件中处理它们?
myStmt.setInt(1, theBook.getNumber());
myStmt.setInt(2, theBook.getPhone());
myStmt.setDate(3, theBook.getStart());
myStmt.setDate(4, theBook.getEnd());
myStmt.setString(5, theBook.getName());
在我的 Java 类、DBUtil 和 Servlet 中,我导入了 java.util.Date。如果我使用(如上面的例子) myStmt.setDate(X, value) 我得到了一个错误:java.util.date 不能转换成 java.sql.date
【问题讨论】:
仅供参考,麻烦的旧java.util.Date
和 java.sql.Date
类现在是遗留的。多年前被 java.time 类取代。具体来说,分别是Instant
和LocalDate
。
【参考方案1】:
如果您使用的是 Java8+ 和 Jdbc 4.x,您可以使用 java.time API 和 setObject
而不是 java.util.Date
,您也可以使用 LocalDateTime
和您的区域 ID,如下所示:
LocalDateTime startDate = ...
LocalDateTime endDate = ...
myStmt.setObject(4, startDate);
myStmt.setObject(5, endDate);
如果您坚持使用 Java 7 或更低版本,您可以查看此链接:
Using setDate in PreparedStatement【讨论】:
【参考方案2】:您需要使用java.sql.Date
:
myStmt.setDate(3, new java.sql.Date(theBook.getStart().getTime()));
【讨论】:
如果我使用 java.sql.Date 是否在我的 Servlet 和 Java 类 java.util.Date 上仍然存在?如果我只为 DBUtil 导入 java.sqla.date 并使用您向我展示的语法,可以吗? :) @Luke_Nuke 如果您没有在同一代码中的其他任何地方使用java.util.Date
,当然,您可以只导入java.sql.Date
。
我在 Class.java ServletController.java 中导入 java.util.Date,也在我的 DBUtil 中导入 ATM。因此,如果我确实导入它们(java.util)并且我使用语法: myStmt.setDate(3, new java.sql.Date(theBook.getStart().getTime()));应该可以吗?我是否有该语法的 ti import java.sql.Date 或者没有必要? :)
@Luke_Nuke 如果您使用的是完全限定的类名 (java.sql.Date
),则无需导入它。以上是关于如何处理 DBUtil 中的日期类型值的主要内容,如果未能解决你的问题,请参考以下文章