使用以下代码,我想问一下如何传递来自文本字段的“日期”参数。我打算使用DAO和servlet创建一个简单的日期范围查询。我可以使用此代码显示所有列,但是我想使用日期进行过滤…
这是我的代码:
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; } }
使用HttpServletRequest#getParameter()收集请求参数。假设输入字段具有名称date。
HttpServletRequest#getParameter()
date
String dateString = request.getParameter("date");
使用SimpleDateFormat#parse()将其转换为java.util.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);
您需要将其转换为java.sql.Date,以便可以PreparedStatement#setDate()在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 ?的记录,或者搜索指定日期之间的记录。
WHERE date > ?
WHERE date < ?
WHERE date BETWEEN ? and ?