【问题标题】:Java: creating a date object from a string and inserting into MySQLJava:从字符串创建日期对象并插入 MySQL
【发布时间】:2010-09-27 02:49:13
【问题描述】:

每当我必须在 Java 中处理日期/时间时,我都会感到难过

我正在尝试解析字符串并将其转换为日期对象以插入到preparepared 语句中。我一直试图让这个工作,但没有运气。当我去编译类时,我也会收到有用的错误消息。

“线程“main”中的异常 java.lang.Error:未解决的编译问题: PreparedStatement 类型中的方法 setDate(int, Date) 不适用于参数 (int, Date)"

嗯,WTF?

这是有问题的代码。

for(int i = 0; i < flights.size(); i++){

    String[] details = flight[i].toString().split(":"); 
    DateFormat formatter ; 
    formatter = new SimpleDateFormat("ddMMyyyy");
    Date date = formatter.parse(details[1]); 

    PreparedStatement pstmt = conn.prepareStatement(insertsql);
    pstmt.setString(1, details[0]);
    pstmt.setDate(2, date);
    pstmt.setString(3, details[2] + "00");
    pstmt.setString(4, details[3]);
    pstmt.setString(5, details[4]);
    pstmt.setString(6, details[5]);
    pstmt.setString(7, details[6]);
    pstmt.setString(8, details[7]);
    pstmt.setString(9, details[8]);
    pstmt.executeUpdate();

}

【问题讨论】:

  • 根据我的经验,尽量不要定期创建 DateFormat 对象。它们的创建时间真的很昂贵。尝试在循环之外创建它并重用它。你会节省很多时间。
  • @BrentNash 您的评论是正确的。但是让我们提醒一下 [SimpleDateFormat] 不是 线程安全的。因此,请确保您确实 在新线程的上下文中创建新实例。或者,更好的是,使用新的 java.time 包而不是旧的日期时间类。
  • @BasilBourque 原来的评论是很久以前的事了。如果你今天问我,我会告诉大家使用 JodaTime 做所有事情。
  • @BrentNash 当然,我明白了。我真的是在和其他 8,000 名阅读这篇文章的人说话,而不是你。
  • java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。此外,Home Page of Joda-Time 写道:请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。 检查this answerthis answer 了解如何将 java.time API 与 JDBC 一起使用。

标签: java sql date prepared-statement


【解决方案1】:

PreparedStatement.setDate 采用 java.sql.Date,而不是 java.util.Date

(出于兴趣,为什么您实际上没有将其视为编译时错误?如果您无需在测试运行中到达该点即可解决编译失败,您的生活将变得容易得多。 .)

【讨论】:

    【解决方案2】:

    我的猜测是你混合了 java.util.Date 和 java.sql.Date ...

    【讨论】:

      【解决方案3】:

      MySQL 日期/时间字符串

      import java.sql.Date;
      import java.sql.Time;
      
       statement.setDate(4, Date.valueOf("2009-08-26"));
       statement.setTime(5, Time.valueOf("12:04:08"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 2019-02-09
        相关资源
        最近更新 更多