在处理java.lang.NullPointerException
JDBC
Swing
组件(如JTable
DefaultTableModel
我编写了一个方法,它从DAO实现中获取封装在对象中的结果集,我在NullPointerException
内填充。
问题是,如果数据库表还没有记录,则dao实现服务返回的对象可能有也可能没有数据/结果集。
这导致public DefaultTableModel getMiscellaneous(int gradeLevelId){
DefaultTableModel defaultTableModel = new DefaultTableModel();
String[] columns = {"Name","Amount"};
MiscellaneousFees miscellaneousFees = schoolFeesDaoImpl.getMiscellaneous(gradeLevelId);
List<Fee> feeList = miscellaneousFees.getFees();
for(Fee fee: feeList){
Object[] rowData = {fee.getName(),fee.getAmount()};
defaultTableModel.addRow(rowData);
}
defaultTableModel.setColumnIdentifiers(columns);
return defaultTableModel;
}
public MiscellaneousFees getMiscellaneous(int gradeLevelId) {
MiscellaneousFees miscellaneousFees = new MiscellaneousFees();
List<Fee> feeList = new ArrayList<>();
String SQL = "{CALL getMiscellaneousFeesByGradeLevelId(?)}";
try (Connection con = DBUtil.getConnection(DBType.MYSQL);
CallableStatement cs = con.prepareCall(SQL);){
cs.setInt(1, gradeLevelId);
try(ResultSet rs = cs.executeQuery();){
while(rs.next()){
SchoolYear schoolYear = new SchoolYear();
schoolYear.setSchoolYearId(rs.getInt("schoolyear_id"));
schoolYear.setYearFrom(rs.getInt("yearFrom"));
schoolYear.setYearTo(rs.getInt("yearTo"));
schoolYear.setIsActive(rs.getBoolean("isActive"));
schoolYear.setStart_date(rs.getDate("start_date"));
schoolYear.setEnd_date(rs.getDate("end_date"));
schoolYear.setIsCurrentSchoolYear(rs.getBoolean("isCurrentSchoolYear"));
GradeLevel gradeLevel = new GradeLevel();
gradeLevel.setId(rs.getInt("gradelevel_id"));
gradeLevel.setLevel(rs.getInt("grade_level"));
gradeLevel.setIsActive(rs.getBoolean("isActive"));
FeeCategory feeCategory = new FeeCategory();
feeCategory.setCategory(rs.getString("fee_category"));
feeCategory.setId(rs.getInt("fee_category_id"));
Fee fee = new Fee();
fee.setId(rs.getInt("fee_id"));
fee.setName(rs.getString("fee_name"));
fee.setDescription(rs.getString("fee_description"));
fee.setAmount(rs.getDouble("fee_amount"));
fee.setFeeCategory(feeCategory);
fee.setGradeLevel(gradeLevel);
fee.setSchoolYear(schoolYear);
feeList.add(fee);
}
miscellaneousFees.setFees(feeList);
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null,e.getMessage());
}
return miscellaneousFees;
}
NullPointerException
在miscellaneous
对象中包含的结果集为空时,如何阻止NullPointerException
的任何建议或建议?
我在这行代码中遇到MiscellaneousFees miscellaneousFees = schoolFeesDaoImpl.getMiscellaneous(gradeLevelId);
错误
Dropzone.prototype.cancelUpload = function (file) {
var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;
if (file.status === Dropzone.UPLOADING) {
this.emit("canceled", file);
} else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {
file.status = Dropzone.CANCELED;
this.emit("canceled", file);
if (this.options.uploadMultiple) {
this.emit("canceledmultiple", [file]);
}
}
if (this.options.autoProcessQueue) {
return this.processQueue();
}
};
谢谢。
答案 0 :(得分:1)
不要设置列表,这是一种不好的做法,会导致这类问题。在您的MiscellaneousFees中,您可以将列表初始化为空ArrayList,而不是使用新创建的列表执行miscellaneousFees.setFees(feeList),对于您调用miscellaneousFees.addFee(费用)的每个元素(将元素添加到内部列表) )。
这样,如果您没有任何费用,列表将为空且不为空,这更有意义。同时避免暴露对象的内部状态(列表)会阻止人们执行令人讨厌的代码,这些代码会以您未预料到的方式更改对象的行为。
答案 1 :(得分:0)
schoolFeesDaoImpl
为空。你还没有创建它。