为什么我从这个Java代码中得到一个空指针异常?

为什么我从这个Java代码中得到一个空指针异常?,java,jdbc,Java,Jdbc,我有一个方法。。。我找不到错误的地方: public String getUsernameforID(int id) { String statment = "SELECT USERNAME FROM `BENUTZER` WHERE `ID` = ? ;"; String username = null; try { PreparedStatement ps = dbCommunicator.getStatment(statment); //

我有一个方法。。。我找不到错误的地方:

    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;
我认为这是一个声明。。。但我怎样才能找到答案呢? 我得到一个空指针

编辑: 我的GetStation方法:

    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)

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

String statment = "SELECT USERNAME  FROM `BENUTZER` WHERE `ID` = ?";
您的原始查询后面有一个分号,这是非法的。这可能会在稍后阶段引发nullpointerexception,我建议您发布异常的内容

编辑:

应该是:

dbCommunicator.getStatement(statment);

您将“statement”拼错为“statment”,这对于变量名来说是可以的,但在引用方法时则不行:)

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

String statment = "SELECT USERNAME  FROM `BENUTZER` WHERE `ID` = ?";
您的原始查询后面有一个分号,这是非法的。这可能会在稍后阶段引发nullpointerexception,我建议您发布异常的内容

编辑:

应该是:

dbCommunicator.getStatement(statment);
您将“statement”拼错为“statment”,这对于变量名来说是可以的,但在引用方法时则不行:)

而不是:

PreparedStatement ps = dbCommunicator.getStatment(statment);

PreparedStatement ps = dbCommunicator.prepareStatement(statment);
这就是我在使用oracle时所做的

而不是:

PreparedStatement ps = dbCommunicator.getStatment(statment);

PreparedStatement ps = dbCommunicator.prepareStatement(statment);

这就是我在使用oracle时遇到的问题。

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

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

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.getstation
方法中,在
DBCommunicator.java
的第107行位置抛出了
NullPointerException

此外,从
DBManager.java
的第358行调用了
getstation
方法,该行位于
DBManager.getUsernameforID
方法中

因此,应该检查的第一个地方是
DBCommunicator.java
的第107行

尽管给定的代码段中没有行号,但可以假定以下行中发生了
NullPointerException

ps = (PreparedStatement) connection.prepareStatement(st);
关于
NullPointerException
s,有一件事是相当常见的——它们通常在对
null
引用执行方法调用时出现。对不存在的对象调用方法将抛出
NullPointerException

在上面的代码中,可以预期
连接
变量实际上是
null
,而不是
连接


这将导致尝试跟踪为什么
连接
变量为
null
,而不是与已初始化的数据库建立有效连接。

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

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

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.getstation
方法中,在
DBCommunicator.java
的第107行位置抛出了
NullPointerException

此外,从
DBManager.java
的第358行调用了
getstation
方法,该行位于
DBManager.getUsernameforID
方法中

因此,应该检查的第一个地方是
DBCommunicator.java
的第107行

尽管给定的代码段中没有行号,但可以假定以下行中发生了
NullPointerException

ps = (PreparedStatement) connection.prepareStatement(st);
关于
NullPointerException
s,有一件事是相当常见的——它们通常在对
null
引用执行方法调用时出现。对不存在的对象调用方法将抛出
NullPointerException

在上面的代码中,可以预期
连接
变量实际上是
null
,而不是
连接


这将导致尝试跟踪为什么
连接
变量为
null
,而不是与已初始化的数据库建立有效连接。

no。。这不是问题所在:(所以粘贴您的异常,或者至少粘贴引发iTunes的行号不是错误:Sno..这不是问题所在:(因此,粘贴您的异常,或者至少粘贴引发iTunes的行号,这不是错误:SNullPointerException..where?还将原始异常投票附加为“不再相关”关闭。NPE源于getStatement(),可能连接为空。conenct()中出现了无声故障)可能?NullPointerException..where?还将原始exceptionVoting附加为“不再相关”关闭。NPE源自getStatement(),可能连接为null。conenct()中可能会出现无声故障?