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"));
答案 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;