防止JDBC中返回的空结果集出现NullPointerException错误

时间:2017-05-24 09:20:14

标签: java swing nullpointerexception jtable defaulttablemodel

在处理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();
    }
};

谢谢。

2 个答案:

答案 0 :(得分:1)

不要设置列表,这是一种不好的做法,会导致这类问题。在您的MiscellaneousFees中,您可以将列表初始化为空ArrayList,而不是使用新创建的列表执行miscellaneousFees.setFees(feeList),对于您调用miscellaneousFees.addFee(费用)的每个元素(将元素添加到内部列表) )。

这样,如果您没有任何费用,列表将为空且不为空,这更有意义。同时避免暴露对象的内部状态(列表)会阻止人们执行令人讨厌的代码,这些代码会以您未预料到的方式更改对象的行为。

答案 1 :(得分:0)

schoolFeesDaoImpl为空。你还没有创建它。