为什么我会收到来自这个Java代码空指针异常? [关闭](Why am I getting a

2019-09-16 15:14发布

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

    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;

我认为这是该语句......但我怎么能发现这一点? 我得到一个空指针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;
    }

例外:

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)

Answer 1:

虽然这个问题可能已经解决,这里有一个关于如何去调试给出的堆栈跟踪一点点。

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

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)

什么这说明的是,在test.DBCommunicator.getStatment方法,一个NullPointerException在107线的位置抛出DBCommunicator.java

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

因此,应检查首先是什么是在107线回事DBCommunicator.java

虽然有代码片段给出代码中没有行号,可以假定一个NullPointerException发生在下面一行:

ps = (PreparedStatement) connection.prepareStatement(st);

有一件事情是很常见约NullPointerException秒-他们在方法调用上进行一般出现null引用。 调用的对象不存在将抛出的一个方法NullPointerException

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

这应导致试图追查为什么connection变量为null ,而不必被初始化数据库的有效连接。



Answer 2:

这可能是因为您的查询失败,请尝试将其更改为:

String statment = "SELECT USERNAME  FROM `BENUTZER` WHERE `ID` = ?";

你原来的查询有一个尾随分号,这是违法的。 这可能造成在后一阶段抛出了一个NullPointerException,我劝你发布你的异常的内容。

编辑:

dbCommunicator.getStatment(statment);

应该:

dbCommunicator.getStatement(statment);

指的是方法,当你的拼写错误“声明”作为“statment”,这是罚款变量名,而不是:)



Answer 3:

//Ending ";" inside the string, is not neccessary.
String statment = "SELECT USERNAME  FROM `BENUTZER` WHERE `ID` = ? ;";

代替:

PreparedStatement ps = dbCommunicator.getStatment(statment);

PreparedStatement ps = dbCommunicator.prepareStatement(statment);

这就是我对使用Oracle。



文章来源: Why am I getting a Null Pointer Exception from this Java code? [closed]
标签: java jdbc