java - 通过数据数据库实现搜索字段

标签 java jsp servlets java-web-start

我有一个包含表的数据库:航空公司航类(多对一航空公司)。

我正在尝试根据航类号进行航类搜索。

数据库表中每个字段的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>

我的应用程序的一些屏幕截图。

  • 在第一个屏幕上,我选择航空公司,然后获得航类列表。

    App screenshot

  • 第二个我必须按航类号搜索。为了在类里面清楚起见,我举了一个例子来说明如何进行排序并且它工作正常,但是在搜索时我遇到了问题。我需要在字段中输入航类号并仅接收它。

    screenshot

最佳答案

您在哪里设置 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/

相关文章:

在托管服务器上运行 Java Web 应用程序时出现 java.security.AccessControlException

java - 为 HTTP servlet 创建了多少个实例

java - ResultSetMetaData 是否为空?

html - 如何在JSP中使用数组将Html表值插入数据库

java - Spring data jpa 在普通java应用程序中提交?

java - 如何让JSP调用Servlet更安全?

java - 在Servlet中创建Session并在JSP页面中使用?

java - 在 tomcat servlet 中检测客户端断开连接?

java - 未调用 Netty 编码器

java - 是否可以借助注释在我自己的代码之外编写代码?