我有一个包含表的数据库:航空公司、航类(多对一航空公司)。
我正在尝试根据航类号进行航类搜索。
数据库表中每个字段的get和set在哪里?
public List<Flight> findFlightsByAircompany(int aircompany_id) throws DBException {
List<Flight> list = new ArrayList<Flight>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnection();
pstmt = con.prepareStatement(GET_FLIGHT_BY_AIRCOMPANY);
pstmt.setInt(1, aircompany_id);
rs = pstmt.executeQuery();
while (rs.next()) {
list.add(getFlight(rs));
}
con.commit();
} catch (SQLException e) {
rollback(con);
throw new DBException("Cannot find flight by aircompany id", e);
} finally {
close(con, pstmt, rs);
}
return list;
}
public List<Flight> findFlightByNumber(String number) throws DBException{
List<Flight> list = new ArrayList<Flight>();
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = getConnection();
pstmt = con.prepareStatement(GET_FLIGHT_BY_NUMBER);
pstmt.setInt(1, Integer.parseInt(number));
rs = pstmt.executeQuery();
while (rs.next()) {
list.add(getFlight(rs));
}
con.commit();
} catch (SQLException e) {
rollback(con);
throw new DBException("Cannot find flight by number", e);
} finally {
close(con, pstmt, rs);
}
return list;
}
private Flight getFlight(ResultSet rs) throws SQLException, DBException {
Flight flight = new Flight();
flight.setId(rs.getInt("ID"));
flight.setName(rs.getString(NAME));
flight.setStartPoint(rs.getString("STARTPOINT"));
flight.setEndPoint(rs.getString("ENDPOINT"));
flight.setNumber(rs.getInt("NUMBER"));
flight.setDepartureTime(rs.getInt("DEPARTURE_TIME"));
flight.setAircompanyId(rs.getInt("AIRCOMPANY_ID"));
return flight;
}
SQL 请求
private static final String GET_FLIGHT_BY_AIRCOMPANY = "SELECT * from flight where AIRCOMPANY_ID=?";
private static final String GET_FLIGHT_BY_NUMBER = "SELECT * from flight where number=?";
之后我尝试获取属性
int aircompany = -1;
if (session.getAttribute(AIRCOMOANY) != null) {
aircompany = (Integer) session.getAttribute(AIRCOMOANY);
}
if (request.getParameter(AIRCOMOANY) != null) {
aircompany = Integer.valueOf(request.getParameter(AIRCOMOANY));
}
System.out.println(aircompany);
String sort = request.getParameter("sort");
List<Flight> flight = db.findFlightsByAircompany(aircompany);;
if ("name".equals(sort)) {
Collections.sort(flight, new Comparators.CompareByName());
} else if ("number".equals(sort)) {
Collections.sort(flight, new Comparators.CompareByNumber());
}
String search = request.getParameter("search");
if ("number".equals(search)){
System.out.println("fewfw");
flight = db.findFlightByNumber(String.valueOf(session.getAttribute("number"))); //maybe it's wrong
}
如何正确调用“number”字段并在JSP页面上使用?
<div align="center">
<form action="controller" method="post">
<fmt:message key="sort_by"/> <select name="sort">
<option value="name"><fmt:message key="admin_jsp.aircompany_name"/></option>
<option value="number"><fmt:message key="number"/></option>
</select> <input type="hidden" name="command" value="getFlights"> <input
type="submit" value="<fmt:message key="sort"/>">
</form>
<br>
<form action="controller" method="post">
<option value ="number"><fmt:message key="number"/></option><input type="text" name="search" value ="">
<input type ="hidden" name ="command" value ="getFlights"> <input type="submit" value="Search">
</form>
</div>
我的应用程序的一些屏幕截图。
最佳答案
您在哪里设置 session 属性“AIRCOMOANY”?这是在某处定义的常量吗?还要确保这不是导致您出现问题的拼写错误,因为
aircompany = Integer.valueOf(request.getParameter(AIRCOMOANY));
可能会导致一些问题。
flight = db.findFlightByNumber(String.valueOf(session.getAttribute("number")));
您正在使用 session.getAttribute("number"),但我没有看到您设置 session 属性“number”的任何地方。
如果您只需要用户输入的航类号
`<form action="controller" method="post">
<option value ="number"><fmt:message key="number"/></option>
<input type="text" name="search" value ="">
<input type ="hidden" name ="command" value ="getFlights">
<input type="submit" value="Search">
</form>`
尝试如下:
`<form action="controller" method="post">
<label for="num">Flight Number</label>
<input type="text" id="num" name="number">
<input type ="hidden" name ="command" value ="getFlights">
<input type="submit" value="Search">
</form>`
然后在你的 Controller 中而不是:
`String search = request.getParameter("search");
if ("number".equals(search)){
System.out.println("fewfw");
flight = db.findFlightByNumber(String.valueOf(session.getAttribute("number")));
}`
尝试:
`String number = request.getParameter("number");
if(number != null){
System.out.println("fewfw");
flight = db.findFlightByNumber(number);
}`
祝你好运,希望这有点帮助。
关于java - 通过数据数据库实现搜索字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929062/