如何处理 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.Datejava.sql.Date 类现在是遗留的。多年前被 java.time 类取代。具体来说,分别是InstantLocalDate 【参考方案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 中的日期类型值的主要内容,如果未能解决你的问题,请参考以下文章

写入期望类型不是浮点数的数据库时如何处理 NaN 值?

如何处理 ASP.NET MVC 3 中每个键的多个值?

如何处理JavaScript 中的货币值?

在 python 中进行迭代时如何处理日期时间的 NaT 值?

Symfony:如何处理表单中的日期字段

在MYSQL中将日期转换为日期范围---如何处理日期中的间隙