为什么我从这个Java代码中获得Null Pointer Exception?

dar*_*ain 1 java jdbc

我有一个方法...我找不到错误:

    public String getUsernameforID(int id) {
    String statment = "SELECT USERNAME  FROM `BENUTZER` WHERE `ID` = ? ;";
    String username = null;
    try {
        PreparedStatement ps = dbCommunicator.getStatment(statment);  // HERE : NULL POINTER EXECTION
        ps.setInt(1, id);
        ResultSet rs = dbCommunicator.readFromDB(ps);

        if (rs.first()) {
            username = rs.getString("USERNAME");
        }
    } catch (SQLException ex) {
        Logger.getLogger(DBManager.class.getName()).log(Level.SEVERE, null, ex);
    }
    return username;
Run Code Online (Sandbox Code Playgroud)

我认为这是声明......但我怎么能找到这个呢?我得到一个Null Pointer Exeption.

编辑:我的getStatment方法:

    public PreparedStatement getStatment(String st) {
    connect();
    PreparedStatement ps = null;
    try {
        ps = (PreparedStatement) connection.prepareStatement(st);
    } catch (SQLException ex) {
        Logger.getLogger(DBCommunicator.class.getName()).log(Level.SEVERE, null, ex);
    }
    return ps;
    }
Run Code Online (Sandbox Code Playgroud)

例外情况:

Exception in thread "main" java.lang.NullPointerException
    at test.DBCommunicator.getStatment(DBCommunicator.java:107)
    at test.database.DBManager.getUsernameforID(DBManager.java:359)
    at dbtestdrive.Main.main(Main.java:25)
Run Code Online (Sandbox Code Playgroud)

coo*_*ird 5

虽然这个问题可能已经解决了,但这里有一些关于如何在给定堆栈跟踪的情况下进行调试的问题.

在这种情况下,堆栈跟踪如下:

Exception in thread "main" java.lang.NullPointerException
    at test.DBCommunicator.getStatment(DBCommunicator.java:107)
    at test.database.DBManager.getUsernameforID(DBManager.java:359)
    at dbtestdrive.Main.main(Main.java:25)
Run Code Online (Sandbox Code Playgroud)

这表明在该test.DBCommunicator.getStatment方法中,a NullPointerException被抛出到107行的位置DBCommunicator.java.

此外,该getStatment方法从管线358的称为DBManager.java这是在DBManager.getUsernameforID方法.

因此,应该检查的第一个地方是在第107行发生的事情DBCommunicator.java.

虽然给出的代码片段中没有行号,但可以假设a NullPointerException出现在以下行中:

ps = (PreparedStatement) connection.prepareStatement(st);
Run Code Online (Sandbox Code Playgroud)

有一件事在NullPointerExceptions 上很常见- 它们通常在对null引用执行方法调用时出现.在不存在的对象上调用方法将抛出一个NullPointerException.

在上面的代码中,可以预期connection变量实际上是null,而不是具有Connection.

这应该导致尝试追踪connection变量的原因null而不是与初始化的数据库建立有效连接.