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>

結果ページの 2 つの入力の間に日付があるすべてのレコードをフィルタリングして表示できるようにしたいと考えています。

テキストを日付に解析する:

<%
  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 に答える