Java JDBC:将日期值插入MySQL

Java JDBC:将日期值插入MySQL,java,mysql,sql,date,jdbc,Java,Mysql,Sql,Date,Jdbc,我想知道如何使用JavaJDBC为MySQL数据库设置日期值。下面是我的代码 String lastCrawlDate = "2014-01-28" PreparedStatement p = con.prepareStatement("insert into JsonData (last_crawl_date) values(?))"); p.setDate(1, Date.valueOf(lastCrawlDate)); 如您所见,lastCrawlDate是一个字符串,格式为yy

我想知道如何使用JavaJDBC为MySQL数据库设置日期值。下面是我的代码

 String lastCrawlDate = "2014-01-28"
 PreparedStatement p = con.prepareStatement("insert into JsonData (last_crawl_date) values(?))");

 p.setDate(1, Date.valueOf(lastCrawlDate));
如您所见,
lastCrawlDate
是一个
字符串
,格式为
yyyy/mm/dd

下面是我的表的外观以及
Date
字段的定义


我如何才能做到这一点?

立即将日期作为字符串插入

p.setString(1, lastCrawlDate);
一模一样

insert into Table1 (last_crawl_date) values ('2014-01-28');
MySQL以以下格式识别日期值:

  • 作为“YYYY-MM-DD”或“YY-MM-DD”格式的字符串。允许使用“宽松”语法:可以使用任何标点符号 作为日期部分之间的分隔符。例如,“2012-12-31”, '2012/12/31'、'2012^12^31'和'2012@12@31'是等效的

  • 如果字符串作为日期有意义,则为不带分隔符的“YYYYMMDD”或“YYMMDD”格式的字符串。例如 “20070523”和“070523”被解释为“2007-05-23”,但“071332” 是非法的(它有无意义的月和日部分)并成为 “0000-00-00”

  • 作为YYYYMMDD或YYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905和830905是 解释为“1983-09-05”

使用此方法,您可以编写一个方法,从给定日期获取字符串:

public static String getString(Date d) {
   return new SimpleDateFormat("yyyy-MM-dd").format(d);
}
喜欢

insert into JsonData (last_crawl_date) values(DATE_FORMAT('2014/02/19','%Y-%m-%d'));
提供用日期类型字段替换占位符(
)的方法和。使用它们

String lastCrawlDate = "2014-01-28";
Date utilDate = new SimpleDateFormat("yyyy-MM-dd").parse(lastCrawlDate);
// because PreparedStatement#setDate(..) expects a java.sql.Date argument
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 

Connection con = ...;
PreparedStatement p = con.prepareStatement("insert into JsonData (last_crawl_date) values(?))");
p.setDate(1, sqlDate);

你现有的代码中哪一部分失败了?mysql有从字符串到日期的转换系统吗?@SotiriosDelimanolis请参考这里@Sailator我没有否决,但是你没有使用与问题相同的日期格式,你删除了参数化,这实际上是一个很好的主意。那么这是否意味着我可以在不做任何修改的情况下使用我的代码?是的。如果要以字符串格式插入日期,请使用
setString
。如果您的日期是
java.util.date
,则使用
setString(1,getString(myDate))