Java:从字符串创建日期对象并插入MySQL

Java:从字符串创建日期对象并插入MySQL,java,sql,date,prepared-statement,Java,Sql,Date,Prepared Statement,每当我不得不用java处理日期/时间时,我都会感到难过 我试图解析一个字符串,并将其转换为日期对象以插入preparepared语句中。我一直在努力使这项工作,但没有运气。当我去编译这个类时,我还得到了有用的错误消息 主线程java.lang中出现异常。错误:未解决的编译问题: 类型PreparedStatement中的方法setDateint,Date不适用于参数int,Date 呃WTF 这是违规代码 for(int i = 0; i < flights.size(); i++){

每当我不得不用java处理日期/时间时,我都会感到难过

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

主线程java.lang中出现异常。错误:未解决的编译问题: 类型PreparedStatement中的方法setDateint,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();

}

我猜您混合了java.util.Date和java.sql.Date…

需要a,而不是a


出于兴趣,你为什么不把它看作编译时错误呢?如果您能够解决编译失败问题,而不必在测试运行中达到这一点,那么您的生活将变得更加轻松…

String to MySQL Date/Time

import java.sql.Date;
import java.sql.Time;

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

根据我的经验,尽量不要定期创建DateFormat对象。他们真的很昂贵的时间明智的创造。尝试在循环之外创建它并重用它。您将节省大量时间。@BrentNash您的评论是正确的。但让我们添加一个提醒,[SimpleDataFormat]不是线程安全的。因此,请确保您确实在新线程的上下文中创建了新实例。或者,更好的方法是使用新的java.time包,而不是旧的日期时间类。@BasilBourque原始注释是很久以前的事了。如果你今天问我,我会告诉每个人用JodaTime做任何事情。@BrentNash当然,我理解。我真的是在和读这篇文章的8000人说话,不是你。