如何执行SQL语句?

时间:2014-10-30 13:32:59

标签: java select

error: java.lang.NullPointerException,原因是什么?

我的班级名字是; DP.java

public static TPreparedStatement Fill(SessionStruct ss, 
        String seq) throws SQLException {
    TPreparedStatement tp = null;

    try {

        String sql = "Select name,surname from NAMES where seq=? ";

        tp = new TPreparedStatement(ss, sql);
        tp.setString(1, seq);
        tp.executeQuery();
        tp.close();
    } catch (SQLException ex) {
        tp.close();
        ss.rollbackNoException();
        ex.printStackTrace();
        throw ex;
    }
    return tp;

}

另一堂课是; DLP.java

public void Load() throws HException {
    TPreparedStatement tp = null;
    try {
        tp = DP.Fill(rc.ss, rc.getRequest()
                .getParameter("PK"));

        txtName.setValue(tp.getString("NAME"));    
        txtSurname.setValue(tp.getString("SURNAME"));

    } catch (Exception ex) {
        ex.printStackTrace();
        rc.ss.rollbackNoException();
    }
}

当我在调试模式下运行时,它已跳过;

txtName.setValue(tp.getString("NAME"));    
txtSurname.setValue(tp.getString("SURNAME"));

3 个答案:

答案 0 :(得分:1)

只是一个疯狂的猜测,因为我们在这里显然缺乏一些信息。无论如何:

在从TPreparedStatment返回之前,您认真关闭了Fill。然后,在调用者中,您调用该闭合语句上的方法:

public static TPreparedStatement Fill(SessionStruct ss, 
        String seq) throws SQLException {
    TPreparedStatement tp = null;

    try {
        ...
        tp.close();    // <--------------
    } catch (SQLException ex) {
        tp.close();    // <--------------
        ...
    }
    return tp;
}
    tp = DP.Fill(rc.ss, rc.getRequest()
            .getParameter("PK"));

    txtName.setValue(tp.getString("NAME")); 
    //               ^^
    //            closed !

我无法保证导致您NullPointerException。但是通常不建议在封闭对象上调用任何方法,因为根据usual semantic,在对象上调用close应该放弃任何底层资源。

答案 1 :(得分:0)

我会使用finally块来关闭你的tp资源。 查看完整的堆栈跟踪来调查空指针也很有帮助。

try {
    String sql = "Select name,surname from NAMES where seq=? ";

    tp = new TPreparedStatement(ss, sql);
    tp.setString(1, seq);
    tp.executeQuery();
} catch (SQLException ex) {
    ss.rollbackNoException();
    ex.printStackTrace();
    throw ex;
} finally {
    tp.close();
}

答案 2 :(得分:0)

谢谢大家..

正确的我原谅 - &gt; tp.close();像这样的陈述;

尝试{         ...         tp.close(); //&lt; --------------     } catch(SQLException ex){         tp.close(); //&lt; --------------         ...     }     return tp;