【发布时间】:2019-04-18 00:10:34
【问题描述】:
从请求中获取参数:
String city = request.getParameter("city");
int price = Integer.parseInt(request.getParameter("price").toString());
int guests ... etc
date init_date... etc
date end_date...etc
initDate = parse init_date with simpledateformater...etc
endDate = parse init_date with simpledateformater...etc
让我们准备一个这样的语句:
String getResult = "SELECT id_housing, name, description_short, price,
photo FROM housing WHERE city = ? AND init_date <= ? AND end_date >= ? AND
price = ? AND guests >= ?";
PreparedStatement stmt = con.prepareStatement(getResult);
stmt.setString(1, city);
stmt.setDate(2, new java.sql.Date(initDate.getTime()));
stmt.setDate(3, new java.sql.Date(endDate.getTime()));
stmt.setInt(4, price);
stmt.setInt(5, guests);
ResultSet rs = stmt.executeQuery();
问题是如果值为空,我如何删除城市或价格或 WHERE 子句之后的任何值。 例如,如果我的用户没有在城市输入文本上写任何文本,则 request.getParameter 将为空(或空字符串“”,我不知道)。在这种情况下,我想删除 city = ?来自准备好的语句的条件,因此查询将返回具有任何城市值的行)。
我试过了
WHERE city = IFNULL(? , *) AND ...
但是没有用。
【问题讨论】:
-
一种选择是根据某些条件构建您的
getResult,例如,如果city == null根本不将其添加到查询中。另一种,使用其中一个 sql 查询生成器 java 库。看看这个,例如stackoverflow.com/questions/15405288/…
标签: java mysql servlets prepared-statement