JSP从数据库中选择数据

时间:2016-11-30 13:50:54

标签: java jsp nullpointerexception

我正试图通过JSP通过Web应用程序从我的数据库中获取某些值。 但由于NullpointerException,它总是给我一个内部服务器失败。 这些是我的文件:

  1. 文件:

     <%@ page import="java.sql.*" %>
      <%@ page contentType="text/html" pageEncoding="UTF-8"%>
      <% Class.forName("com.mysql.jdbc.Driver"); %>
     <!DOCTYPE html>
       <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Webformular</title>
         </head>
        <body>
    <h1>Webformular</h1>
     <%!
      public class Actor {
        String url = "jdbc:mysql://localhost:3306/sakila";
        String Benutzername = "root";
        String Passwort = "";
    
        Connection con = null;
        PreparedStatement selectActors = null;
        ResultSet resultSet = null;
    
        public Actor(){
            try {
    
    
            con = DriverManager.getConnection(url, Benutzername, Passwort);
            selectActors = con.prepareStatement("Select a.first_name,a.last_name, c.title"
            + "FROM actor a, film_actor b, film c"
            +"WHERE a.first_name= ?"
            +"AND a.last_name = ?"
            + "AND a.actor_id = b.actor_id"
            +"AND b.film_id = c.film_id");
             } catch (SQLException e){
                 e.printStackTrace();
             }
        }
    
        public ResultSet getActors(String first, String last){
    
            try {
                selectActors.setString(1,first);
                selectActors.setString(2,last);
             resultSet = selectActors.executeQuery();
            } catch (SQLException e){
                e.printStackTrace();
            }
    
    
        return resultSet;
    }}
    %>
    <%
    String firstName = new String();
    String lastName = new String();
    
    if (request.getParameter("first") !=null) {
        firstName = request.getParameter("first");
    
    } 
     if (request.getParameter("last") !=null) {
        lastName = request.getParameter("last");
    
    } 
    
     Actor actor = new Actor();
     ResultSet actors = actor.getActors(firstName, lastName);
    
    %>
    <table border="1">
    
        <tbody>
            <tr>
                <td>First Name</td>
                <td>Last Name</td>
                <td>Title</td>
            </tr>
            <%while(actors.next()) { %>
            <tr>
                <td><%= actors.getString("first_name") %></td>
                <td><%= actors.getString("last_name") %></td>
                <td><%= actors.getString("title") %></td>
            </tr>
            <% } %>
        </tbody>
    </table>
    
    
      </body>
     </html>
    
  2. 文件:

      <%@page contentType="text/html" pageEncoding="UTF-8"%>
          <!DOCTYPE html>
      <html>
       <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Spezifische Daten auswerten</title>
       </head>
           <body>
             <h1>Spezifische Daten auswerten</h1>
          <form name="Formular" action="anzeige.jsp" method="POST">
    
    <table border="1">
    
        <tbody>
            <tr>
                <td>First Name:</td>
                <td><input type="text" name="first" value="" size="50" /></td>
            </tr>
            <tr>
                <td>Last Name:</td>
                <td><input type="text" name="last" value="" size="50" /></td>
            </tr>
        </tbody>
    </table>
    
    <input type="submit" value="Weiter" name="weiter" />
    <input type="reset" value="Löschen" name="löschen" />
          </form>
      </body>
      </html>
    
  3. 之前是否有人遇到过这个问题并可能对我有所帮助? 我已经做了一些研究并修复了某些错误,但部署中没有任何改变。我的第一个文件总是部署,但每当我想要检索数据时,就会出现NullpointerException。

1 个答案:

答案 0 :(得分:0)

您的SQL在

之前连接没有空格的AND运算符
+"WHERE a.first_name= ?"+"AND a.last_name = ?"+"AND a.actor_id = b.actor_id"

这可能会导致prepareStatement()或executeQuery()失败,但是您的JSP将继续执行,因为您正在捕获异常并将堆栈跟踪打印到Web服务器日志。

之后,selectActors或resultset将为null,并且只要您尝试使用它们就会得到NullPointerException。

所以:添加尝试在SQL中的问号后添加空格。