0

我有一个需要 2 个日期的表格。

<form name="dateInput" action="dateResult.jsp" method="get">
<input type="text" name="startDate" />
<input type="text" name="endDate" />
<input type="submit" value="Submit" />
</form>

我希望它能够过滤并向我显示在结果页面上的两个输入之间有日期的所有记录。

将文本解析为日期:

<%
  DateFormat formatter;
  formatter = new SimpleDateFormat("MM/dd/yyyy"); 

  String startDay; 
  startDay = request.getParameter("startDate");

  java.util.Date startingDay = formatter.parse(startDay);

  String endDay;
  endDay = request.getParameter("endDate");

  java.util.Date endingDay = formatter.parse(endDay);
%>

SQL查询:

rs = stmt.executeQuery( "SELECT * FROM [Inventory Tracking] WHERE [Inventory Tracking].[Purchase_Date] => "+ startingDay +" AND < "+endingDay);

我已经搞砸了几个小时,每次更改都会返回空白结果页面或错误页面。我究竟做错了什么?

我应该将 java.util.Date 转换为 java.sql.Date 吗?

我应该使用 BETWEEN/AND 代替 < 和 > 吗?

4

1 回答 1

1

您的查询肯定不会起作用,因为您最终会执行如下所示的查询:

SELECT * FROM [Inventory Tracking] WHERE [Inventory Tracking].[Purchase_Date] => Jul 25 15:00:40 EDT 2012 AND < Jul 25 15:00:40 EDT 2012.

当然取决于你的日期。如果你只是使用 java.sql 包,你实际上可以使用 PreparedStatement。

PreparedStatement ps = conn.prepareStatement("SELECT * FROM [Inventory Tracking] WHERE [Inventory Tracking].[Purchase_Date] => ? AND [Inventory Tracking].[Purchase_Date] < ?");
            try {
                ps.setDate(1, endDate);
                ps.setDate(2, start);
                ResultSet rs = ps.executeQuery();
                try {
                    while (rs.next()) {
                        // for each row logic
                    }
                } finally {
                    rs.close()
                }
            } finally {
                ps.close();
            }

您的 endDate 和 startDate 应该是 java.sql.Date 的实例。

于 2012-07-25T19:09:34.430 回答