【问题标题】:Query MySQL using JSP and Servlet POST method使用 JSP 和 Servlet POST 方法查询 MySQL
【发布时间】:2013-04-09 01:14:54
【问题描述】:

我不确定我是否尝试正确“打印”我的结果。我想要做的是使用 JSP 接收变量,然后将其传递给 servlet,它将在其中查询数据库,然后显示结果。我测试了在不同的 java 文件中查询我的数据库,我没有遇到任何问题。任何建议将不胜感激!

JSP 文件:

<form method="post" action="HelloServlet"/>
Enter your name:<input name = "exName"/><br>

<input type = "submit" />
</form>

JAVA 文件(servlet):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException {

        //response.setContentType("text/html; charset=ISO-8859-1");
        PrintWriter out = response.getWriter();

        java.sql.Connection con = null;
        java.sql.PreparedStatement pst = null;
        ResultSet rs = null;

        String url = "jdbc:mysql://localhost:3306/masters";  
        String user = "christine";
        String password = "password";

        try{
            String exName = request.getParameter("exName");
            con = DriverManager.getConnection(url, user, password);  
            pst = con.prepareStatement("SELECT * FROM exercise WHERE exercise_name ='"+exName+"';");
            rs = pst.executeQuery();  

            while (rs.next()){
                String name = rs.getString("description_txt");

                out.print(exName);
                out.print(name);
            }   
        }catch(SQLException ex){
        }finally {
            try {
                if (rs != null){
                    rs.close();
                }
                if (pst != null){
                    pst.close();
                }
                if (con != null){
                    con.close();
                }
            }catch(SQLException ex){
            }           
        }       
    }

【问题讨论】:

  • 你完全压制了 SQLException 被抛出。 为什么?throw new ServletException(ex) 添加到 catch 中,这样您就可以得到一个带有堆栈跟踪的漂亮错误页面,并且全部都在 em 上。异常包含问题的全部答案。
  • (我还是个初学者)我想我不知道我正在抑制 SQLException。你介意指出我在做什么吗?我不太明白。谢谢。
  • 您正在捕捉SQLException,但没有对它做任何事情并继续代码流,就好像没有发生什么特别的事情一样。您至少应该记录/打印它,或者在这种情况下最好将其重新抛出为ServletException,符合 Servlet API 规范建议。
  • POST 表单值是属性,使用 getAttribute 代替 getParameter
  • 谢谢你们提供的信息!

标签: mysql jsp servlets


【解决方案1】:

您的代码中需要更改的地方很少。

正如@BalusC 提到的,不要抑制异常。使用out.println(ex);throw new ServletException(ex) 向浏览器写入异常。这将帮助您找到问题的原因。

DriverManager.getConnection()之前添加Class.forName("com.mysql.jdbc.Driver");

因为你已经在使用PreparedStatement,所以使用

pst = con.prepareStatement("SELECT * FROM exercise WHERE exercise_name =?");
pst.setString(1, exName);
rs = pst.executeQuery();

【讨论】:

  • 谢谢哈迪克,我确实做了这些更改,编译并收到:“java.lang.ClassNotFoundException: com.mysql.jdbc.Driver” 我查了一下这是什么意思,我发现 MySQL jdbc类路径中缺少驱动程序 jar 文件。当我搜索如何解决这个问题时,我阅读了下载 JDBC 驱动程序的建议。我已经这样做了,并将它放在我的“库”中,并在那里有“mysql-connector-java-5.1.24-bin.jar”。任何建议将不胜感激!
  • @user2221016:不客气。您可以接受 hwlpful 答案。这鼓励了 SO 上的用户。 :)
  • 哦,对不起,我不清楚......即使有 JDBC 驱动程序,我也收到了那个错误。你认为我错过了什么吗?
  • 编译后,我收到错误:“java.lang.ClassNotFoundException: com.mysql.jdbc.Driver”,我想我不明白为什么我会收到该消息,因为我有我的库中的 JDBC 驱动程序。
  • @user2221016:将.jar文件放在/WEB-INF/lib目录下。重启tomcat。
猜你喜欢
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多