如何解决java.lang.NullPointerException问题

时间:2019-08-21 15:40:07

标签: javascript java mysql netbeans

我是使用JSP的初学者,并且java.lang.NullPointerException有问题。如果我使用以下部分,则会出现问题(完整的源代码在下面)。如果我删除源,页面正在加载,没有任何回报。如果有人帮助我运行代码,我将很高兴。

背景信息。该应用程序应该做什么:

此代码应执行SQL SELECT语句并提供存储在MySQL数据库中的信息。

{ <%@page import="java.sql.*"%>
<% Class.forName("com.mysql.jdbc.Driver");%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <h1>Hello World!</h1>

    <%!

    public class Actor{

        String URL = "jdbc:mysql://localhost:3306/sakila";
        String USERNAME = "root";
        String PASSWORD = "admin";

        Connection connection = null;
        PreparedStatement selectActors = null;
        ResultSet resultSet = null;

        public Actor(){                
            try{                    
                connection = DriverManager.getConnection( 
     "jdbc:mysql://localhost:3306/sakila", "root", "MySQL2019.");

                selectActors = connection.prepareStatement(
                    "SELECT actor_id, first_name, last_name FROM actor");                    
            }catch (SQLException e){                    
                e.printStackTrace();
            }                
        }
            public ResultSet getActors(){                    
                try{                        
                    resultSet = selectActors.executeQuery();                        
                }catch (SQLException e){
                    e.printStackTrace();
                }
                return resultSet;
            }
        }
    %>

    <%
    Actor actor = new Actor();
    ResultSet actors = actor.getActors();
   %> 
<table border="1">
<tbody>
<tr>
<td>Actor ID</td>
<td>First Name</td>
<td>Last Name</td>
</tr>
<tr>
<% while (actors.next()) {%>
<td> <%= actors.getInt("actor_id")%>   </td>
<td><%= actors.getString("first_name")%> </td>
<td><%= actors.getString("last_name")%> </td>
</tr>
<%}%>
</tbody>
</table>

</body>
</html> }

问题代码:

{<%    
Actor actor = new Actor();
ResultSet actors = actor.getActors();
%> }

2 个答案:

答案 0 :(得分:2)

一些建议:

  1. 不要在JSP中使用scriptlet代码。
  2. 了解JSP标准标记库(JSTL)
  3. 不要在Actor之类的模型对象中嵌入数据库代码
  4. 外部化数据库配置
  5. 将您的问题分解为可测试的单独类
  6. 创建一个Actor存储库接口并编写一个实现
  7. 您应该运行代码并给出错误消息。

期望这里的人会生成,打包和运行您的应用程序只是为了看看您从错误中得到了什么是不正确的。

无论什么书或教程建议您使用scriptlet,请扔掉它并找到更好的东西。小脚本是1990年代失败的实验,没有人使用。

public interface ActorRepository {
    List<Actor> findAll();
    List<Actor> findByName(String firstName, String lastName);
}

答案 1 :(得分:0)

您的异常处理可能是原因。您正在捕获SqlException,并且对它们不执行任何操作。

因此,如果以下代码中有异常(如数据库连接错误)

try{

                connection = DriverManager.getConnection( 
     "jdbc:mysql://localhost:3306/sakila", "root", "MySQL2019.");

                selectActors = connection.prepareStatement(
                    "SELECT actor_id, first_name, last_name FROM actor");

            }catch (SQLException e){

                e.printStackTrace();
            }

您将继续使用空的 selectActors 变量,这可能是稍后导致NullPointerException的原因。