开发人:张小军 合作同伴:刘世朝
基于石家庄地铁规划图,这两天我们两个想了许多方法来实现该查询系统,首先我们从一条线路来实现,我们选取了一号线来实现。在数据库中建立了一个名为subway的表。表内有三个属性,分别为id、name、line。name为站名,line为线路号。其源代码如下所示:
common.Subway.java:
package common; public class Subway { private String id; private String name; private String line; public String getId() { return id; } public void setId(String id) { this.id=id; } public String getName() { return name; } public void setName(String name) { this.name=name; } public String getLine() { return line; } public void setLine(String line) { this.line=line; } public Subway() {} public Subway(String id, String name, String line) { this.id = id; this.name = name; this.line=line; } public Subway( String name, String line) { this.name = name; this.line=line; } }
dao.SubwayDao.java:
//这里是构建的方法。
package dao; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import common.Subway; import helper.SbHelper; public class SubwayDao { /* * 搜索一号线的所有路线 */ public List<Subway> subway(String name, String line) { String sql = "select * from subway order by id ASC"; List<Subway> list = new ArrayList<>(); Connection conn = SbHelper.getConn(); Statement state = null; ResultSet rs = null; try { state = conn.createStatement(); rs = state.executeQuery(sql); Subway bean = null; while (rs.next()) { String id = rs.getString("id"); String name1 = rs.getString("name"); String line1 = rs.getString("line"); bean = new Subway(id, name1,line1); list.add(bean); } } catch (SQLException e) { e.printStackTrace(); } finally { SbHelper.close(rs, state, conn); } return list; } /* * 根据站台名获取该站台的id */ public String id(String name) { String sql="select id from subway where name = '"+name+"'"; Connection conn = SbHelper.getConn(); Statement state = null; String id=null; ResultSet rs = null; try { state=conn.createStatement(); rs = state.executeQuery(sql); while(rs.next()) { id=rs.getString("id"); } }catch (SQLException e) { e.printStackTrace(); } finally { SbHelper.close(rs, state, conn); } return id; } /* * 根据站台名获取该站台属于几号线路 */ public String line(String name) { String sql="select line from subway where name = '"+name+"'"; Connection conn = SbHelper.getConn(); Statement state = null; String line=null; ResultSet rs = null; try { state=conn.createStatement(); rs = state.executeQuery(sql); while(rs.next()) { line=rs.getString("line"); line+="号线"; } }catch (SQLException e) { e.printStackTrace(); } finally { SbHelper.close(rs, state, conn); } return line; } /* * 根据获取的id值搜索出其中间的站台升序 */ public String station1(int id1,int id2) { String sql="select name from subway where id between '"+id1+"' and '"+id2+"' order by id ASC" ; Connection conn = SbHelper.getConn(); Statement state = null; ResultSet rs = null; String route = ""; try { state=conn.createStatement(); rs = state.executeQuery(sql); if(rs.next()) route=rs.getString("name"); while(rs.next()) { String name=rs.getString("name"); route+="->"+name; } }catch (SQLException e) { e.printStackTrace(); } finally { SbHelper.close(rs, state, conn); } return route; } /* * 根据获取的id值搜索出其中间的站台降序 */ public String station2(int id1,int id2) { String sql="select name from subaway where id between '"+id1+"' and '"+id2+"' order by id DESC" ; Connection conn = SbHelper.getConn(); Statement state = null; ResultSet rs = null; String route = ""; try { state=conn.createStatement(); rs = state.executeQuery(sql); if(rs.next()) route=rs.getString("name"); while(rs.next()) { String name=rs.getString("name"); route+="->"+name; } }catch (SQLException e) { e.printStackTrace(); } finally { SbHelper.close(rs, state, conn); } return route; } }
helper.SbHleper.java:
package helper; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SbHelper { public static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; public static String dbURL="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=java"; public static String userName="sa"; public static String userPwd="995893"; public static Connection getConn () { Connection conn = null; try { Class.forName(driverName);;//加载驱动 conn = DriverManager.getConnection(dbURL, dbURL, userPwd); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 关闭连接 * @param state * @param conn */ public static void close (Statement state, Connection conn) { if (state != null) { try { state.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void close (ResultSet rs, Statement state, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (state != null) { try { state.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
servlet.SubwayServlet.java
package servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import common.Subway; import dao.SubwayDao; public class SubwayServlet extends HttpServlet { private static final long serialVersionUID = 1L; SubwayDao dao=new SubwayDao(); protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); String method = req.getParameter("method"); if ("one_line".equals(method)) { one_line(req, resp); }else if("no_transfer1".equals(method)) { no_transfer1(req, resp); } } /* * 搜索一号线的所有路线 */ private void one_line(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{ req.setCharacterEncoding("utf-8"); String line = req.getParameter("line"); String name = req.getParameter("name"); List<Subway> ones = dao.subway(name,line); req.setAttribute("ones", ones); req.getRequestDispatcher("one_line_searchlist.jsp").forward(req,resp); } /* * 根据站台名查询出其中间站台 */ private void no_transfer1(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException{ req.setCharacterEncoding("utf-8"); String name= req.getParameter("name"); //从网页获取输入的站台 int id1 = Integer.parseInt(dao.id(name)); //获取其站台id 将其转换为int类型 String name2 = req.getParameter("name2"); int id2 = Integer.parseInt(dao.id(name2)); if(id1<id2) { String station=dao.station1(id1, id2); req.setAttribute("stations", station); String line=dao.line(name); System.out.print(line); req.setAttribute("lines", line); req.getRequestDispatcher("no_transfer_searchlist.jsp").forward(req,resp);//升序车站 req.getRequestDispatcher("no_transfer_searchlist.jsp").forward(req,resp);//升序车站 }else { String station=dao.station2(id2, id1); req.setAttribute("stations", station); String line=dao.line(name); System.out.print(line); req.setAttribute("lines", line); req.getRequestDispatcher("no_transfer_searchlist.jsp").forward(req,resp);//降序车站 req.getRequestDispatcher("no_transfer_searchlist.jsp").forward(req,resp);//升序车站 } } }
下面是jsp文件。
one_line_search.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>一号线</title> <style> .a{ margin-top: 20px; } .b{ font-size: 20px; 160px; color: white; background-color: greenyellow; } </style> </head> <body> <div align="center"> <form action="SubwayServlet?method=one_line" method="post" onsubmit="return check()"> <div class="a"> 一号线 </div> <div class="a"> <button type="submit" class="b">查 询</button> </div> </form> </div> </body> </html>
one_line_searchlist.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>一号线</title> <style> .a{ margin-top: 20px; } .b{ font-size: 20px; 160px; color: white; background-color: greenyellow; } .tb, td { border: 1px solid black; font-size: 22px; } </style> </head> <body> <div align="center"> <table class="tb"> <tr> <td>站台</td> <td>线路</td> <td>起点站——终点站</td> <td>站台</td> </tr> <!-- forEach遍历出adminBeans --> <c:forEach items="${ones}" var="item" varStatus="status"> <tr> <td>${item.id}</td> <td><a>${item.line}</a></td> <td>${item.intro}</td> <td>${item.route}</td> <td>${item.name}</td> </tr> </c:forEach> </table> </div> </body> </html>
no_transfer_search.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> .a{ margin-top: 20px; } .b{ font-size: 20px; 160px; color: white; background-color: greenyellow; } </style> </head>。 <body> <div align="center"> <form action="SubwayServlet?method=no_transfer1" method="post" onsubmit="return check()"> <div class="a"> 起点站<input type="text" id="name" name="name"/> </div> <div class="a"> 终点站<input type="text" id="name2" name="name2" /> </div> <div class="a"> <button type="submit" class="b">查 询</button> </div> </form> </div> </body> </html>
no_transfer_searchlist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <style> .a{ margin-top: 20px; } .b{ font-size: 20px; 160px; color: white; background-color: greenyellow; } .tb, td { border: 1px solid black; font-size: 22px; } </style> </head> <body> <div align="center"> <table class="tb"> <tr> <td></td> <td>线路</td> <td>车次</td> <tr></tr> <tr> <td>中间站</td> <td><%=request.getAttribute("stations") %></td> <td><%=request.getAttribute("lines") %></td> </tr> </table> </div> </body> </html>
数据库中的表:
运行结果:
虽然系统没有报错,但在最后运行时如上图所示出了错。找了许久我们目前还是没找出错误。这是我们开发进度。