我有jsp代码从用户获取日期(使用html表单),我尝试使用preparedStatament(sql)中的日期。 用户以dd / mm / yyyy格式输入日期,我尝试将其转换为sql date yyyy-mm-dd ......
这是htl形式的输入类型:
<td><input type=date name="fdate"/></td>
<td><input type=date name="tdate"/></td>
这是dates.jsp(运行sql)的源代码:
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
String fDateStr = request.getParameter("fdate");
String tDateStr = request.getParameter("tdate");
Date fdate = format.parse(fDateStr);
Date tdate = format.parse(tDateStr);
PreparedStatement prSelect = con.prepareStatement("select show_id,date,artist, name from shows where date between ? and ?");
prSelect.setDate(1, fdate);
prSelect.setDate(2, tdate);
这是我从setDate
行获得的错误:
"The method setDate(int, java.sql.Date) in the type PreparedStatement is not applicable for the arguments (int, java.util.Date)"
我该如何解决?
答案 0 :(得分:1)
SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
应该像
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy",Locale.ENGLISH);
尝试使用Locale进行安全性
再次Date fdate = format.parse(fDateStr);
给你java.util.Date,你需要将它转换为java.sql.Date,把它设置为像这样的PreparedStatement
public static Date convertUtilDateToSqlDate(java.util.Date date){
if(date != null) {
Date sqlDate = new Date(date.getTime());
return sqlDate;
}
return null;
}
然后
prSelect.setDate(1, convertUtilDateToSqlDate(fdte));
prSelect.setDate(2, convertUtilDateToSqlDate(tdate));
答案 1 :(得分:1)
您必须使用java.sql.Date
代替java.util.Date
试试这个
prSelect.setDate(1, java.sql.Date.valueOf(fDateStr));
prSelect.setDate(2, java.sql.Date.valueOf(tDateStr));