【问题标题】:How do I handle Date type value in DBUtil如何处理 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

标签: java mysql servlets jdbc compiler-errors


【解决方案1】:

如果您使用的是 Java8+ 和 Jdbc 4.x,您可以使用 java.time APIsetObject 而不是 java.util.Date,您也可以使用 LocalDateTime 和您的区域 ID,如下所示:

LocalDateTime startDate = ...
LocalDateTime endDate = ...
myStmt.setObject(4, startDate);
myStmt.setObject(5, endDate);

如果您坚持使用 Java 7 或更低版本,您可以查看此链接:

【讨论】:

    【解决方案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),则无需导入它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2016-12-13
    • 2016-04-13
    • 1970-01-01
    相关资源
    最近更新 更多