で返さ空の結果セットにNullPointerExceptionエラーの防止、私は結果を取得する方法を書かれている私は、このようなJTable
JDBC
としてSwing
コンポーネントに置くJDBC
結果セットを扱うとき、私はjava.lang.NullPointerException
を避けることができる方法についてのアドバイスが必要私はDefaultTableModel
の中に移入するDAO実装のオブジェクトにカプセル化されています。
問題は、データベーステーブルにまだレコードがない場合、DAO実装サービスによって返されるオブジェクトにはデータ/結果セットがある場合とない場合があります。
これはNullPointerException
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;
}
へmiscellaneous
オブジェクトに含まれる結果セットが空の場合、私はNullPointerException
を防ぐことができる方法の任意の提案やアドバイスを結果?
私はコード
MiscellaneousFees miscellaneousFees = schoolFeesDaoImpl.getMiscellaneous(gradeLevelId);
のこの行のNullPointerException
エラーはありがとうござい得ます。
その他はnullではありません。それはnullですが、それはschoolFeesDaoImplです。質問はすぐにNPEウォッチャーによって複写としてクローズされます:p – Nathan
結果がない場合、あなたはnullを返さないでしょう。あなたは常に少なくとも空のResultsetを取得します。 –
私は個人的に静的なSchoolFeesDaoImpl schoolFeesDaoImplを含めるのを忘れました。上記の私のコードでは、私はschoolFeeDaoImplを持っています。メソッドがアクションリスナーによって呼び出されたときにnullエラーが発生します。 @SergiyMedvynskyyのリンクを読んでみましょう。重複して申し訳ありません。ありがとう。 – p3ace