1

以下のコードを使用して、テキストフィールドからの「日付」パラメータをどのように渡すことができるかを尋ねたいと思います。DAOとサーブレットを使用して簡単な日付範囲クエリを作成することを計画しています。このコードを使用してすべての列を表示できますが、日付を使用してフィルタリングしたい...

これが私のコードです:

My Servlet




package source;

import java.io.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;

/**
 *
 * @author jaypee.martinez
 */
public class parseServlet extends HttpServlet {

    private parseDAO parseDAO;


    @Override
    public void init() throws ServletException {
        String driver = "org.postgresql.Driver";
        String url = "jdbc:postgresql://localhost5432/mydb";
        String username = "postgres";
        String password = "secret";


        Database database = new Database(driver, url, username, password);
        this.parseDAO = new parseDAO(database);
    }


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


            try {

            List<parseBean> parse_array = parseDAO.results();

            request.setAttribute("parse_array", parse_array);
            request.getRequestDispatcher("results.jsp").forward(request, response);
        }
            catch (SQLException e) {
            throw new ServletException("Cannot retrieve areas", e);
        }
    }

}

と私のDAO

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package source;

import java.sql.*;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class parseDAO {

    private Database database;

    public parseDAO(Database database) {
        this.database = database;
    }

    public List<parseBean> results() throws SQLException {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        List<parseBean> parse_array = new ArrayList<parseBean>();
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");

        try {
            connection = database.getConnection();
            statement = connection.prepareStatement("select * from dateparse");


            resultSet = statement.executeQuery();


            while (resultSet.next()) {
                parseBean parsearray = new parseBean();
                parsearray.setDate(resultSet.getDate("date"));
                parsearray.setName(resultSet.getString("name"));
                parsearray.setAddress(resultSet.getString("address"));
                parse_array.add(parsearray);
            }
        } finally {
            if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
            if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
            if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
        }

        return parse_array;
    }
}
4

2 に答える 2

3

HttpServletRequest#getParameter()リクエストパラメータを収集するために使用します。入力フィールドの名前が。であると仮定しますdate

String dateString = request.getParameter("date");

エンドユーザーが日付の入力を求められた方法に応じて、特定のパターンを使用するSimpleDateFormat#parse()ように変換するために使用します。java.util.Date

Date date = null;

try {
    date = new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
}
catch (ParseException e) {
    // Show error message to enduser about the wrong format and forward back to the JSP with the form.
    request.setAttribute("error", "Invalid format, please enter yyyy-MM-dd");
    request.getRequestDispatcher("search.jsp").forward(request, response);
    return;
}

これをメソッド引数としてDAOメソッドに渡します。

List<ParseBean> results = parseDAO.search(date);

これをに変換して、SQLクエリで設定java.sql.Dateできるようにする必要があります。PreparedStatement#setDate()

String query = "SELECT * FROM dateparse WHERE date = ?";
// ...
statement.setDate(1, new java.sql.Date(date.getTime()));

を使用WHERE date > ?して、指定された日付より新しいレコードを検索したり、指定されWHERE date < ?た日付より古いレコードを検索したりWHERE date BETWEEN ? and ?、指定された日付の間のレコードを検索したりできます。

于 2012-05-21T19:03:40.117 に答える
0

あなたの中でdoGetあなたはリクエストから価値を得るでしょう

String dateFromTxt = request.getParameter("DateFromTxtField");

これをあなたのdaoのresults方法に渡してください

その場合、resultsメソッドは次のようになります。

public List<parseBean> results(String filterDate) throws SQLException {

   String query = "select * from dateparse where date = ? ";

   // get connection and prepare statement, also format the incoming date as per your database requirement then say you store this in variable myFormattedDate

   statement.setDate(1, myFormattedDate);

   // Execute query and fetch result.            

}
于 2012-05-21T18:35:15.747 に答える