【问题标题】:using text input to search Access date column with between/and使用文本输入在/和之间搜索访问日期列
【发布时间】:2012-07-25 18:49:37
【问题描述】:

我有一个需要 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 代替 吗?

【问题讨论】:

  • 为什么在将日期传递给 sql 请求之前解析它们?因为当您执行select ... [Purchase_Date] =&gt; "+ startingDay 时,这将调用java.util.datetoString() 函数,并且此函数将日期返回为dow mon dd hh:mm:ss zzz yyyy 例如(这取决于使用的jdk)。为什么你不只是做"SELECT * FROM [Inventory Tracking] WHERE [Inventory Tracking].[Purchase_Date] =&gt; "+ startDay + "AND &lt; "+endDay);

标签: java sql ms-access


【解决方案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-23
    • 2021-12-12
    • 2022-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多