【发布时间】: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 及其格式化 APISimpleDateFormat已过时且容易出错。此外,Home Page of Joda-Time 写道:请注意,从 Java SE 8 开始,用户被要求迁移到 java.time (JSR-310) - JDK 的核心部分,它取代了这个项目。 检查this answer 和 this answer 了解如何将java.timeAPI 与 JDBC 一起使用。
标签: java sql date prepared-statement