【问题标题】:Date conversion jsp日期转换jsp
【发布时间】:2014-09-12 14:50:18
【问题描述】:

我有从用户那里获取日期的 jsp 代码(使用 html 表单),我尝试在preparedStatament (sql) 中使用日期。 用户以 dd/mm/yyyy 格式输入日期,我尝试将其转换为 sql 日期 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)"

我该如何解决?

【问题讨论】:

  • 某些数据库不允许您创建名为“日期”的列...您使用的是什么 DBMS?
  • 没关系,我有一个名为“日期”的列。这是hyperion sql(jboss)

标签: java sql jsp data-conversion


【解决方案1】:

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd"); 应该是这样的

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy",Locale.ENGLISH);

为安全起见尝试使用区域设置

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));

【讨论】:

  • 我更改了它,但我仍然得到:在这一行找到多个注释: - PreparedStatement 类型中的方法 setDate(int, java.sql.Date) 不适用于参数 (int, java.util.Date) - PreparedStatement 类型中的方法 setDate(int, java.sql.Date) 不适用于 "prSelect.setDate(1, fdate) 行上的参数 (int, java.util.Date) )"
  • 查看完整答案
  • 我做到了,但现在我得到:javax.servlet.ServletException: java.text.ParseException: Unparseable date: "01/01/2013"
  • 那是因为你已经指定 simpledateformat 来解析这个 yyyy-MM-dd 类型的 String 并且你的输入是 01/01/2013(dd/MM/yyyy) 类型在 simpledateformat 参数中改变它
  • 好的,我按照你说的做了。现在我明白了,chrome 中的行为和我从 eclipse 资源管理器中运行它时的行为是不同的。当我使用 yyyy-MM-dd 时,它在 chrome 中工作,当我使用 dd/MM/yyyy 时,它在 eclipse 资源管理器中工作我如何才能通用?
【解决方案2】:

您必须使用java.sql.Date 而不是java.util.Date

试试这个

prSelect.setDate(1, java.sql.Date.valueOf(fDateStr));
prSelect.setDate(2, java.sql.Date.valueOf(tDateStr));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多