je besoin de conseils sur la façon dont je peux éviter java.lang.NullPointerException
lorsqu'ils traitent avec JDBC
jeu de résultats que je mets sur des composants Swing
tels que JTable
Prévention erreur NullPointerException sur le jeu de résultats vide retourné dans JDBC
J'ai écrit une méthode qui obtient le résultat set encapsulé dans un objet à partir d'une implémentation DAO que je place dans un DefaultTableModel
. Le problème est que l'objet renvoyé par le service d'implémentation dao peut avoir ou non des données/jeu de résultats si la table de base de données n'a pas encore d'enregistrement.
Il en résulte un 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;
}
Toute suggestion ou des conseils de la façon dont je peux empêcher l'NullPointerException
lorsque le jeu de résultats contenu dans l'objet miscellaneous
est vide?
Je reçois l'erreur NullPointerException
dans cette ligne de code
MiscellaneousFees miscellaneousFees = schoolFeesDaoImpl.getMiscellaneous(gradeLevelId);
Merci.
divers n'est pas nul, c'est schoolFeesDaoImpl qui est null. La question sera bientôt fermée en tant que doublon par un observateur NPE: p – Nathan
Vous ne récupérerez pas null s'il n'y a pas de résultats; vous obtenez toujours au moins un Resultset vide. –
J'ai oublié d'inclure privé SchoolFeesDaoImpl schoolFeesDaoImpl; dans mon code ci-dessus mais j'ai le schoolFeeDaoImpl. Je reçois l'erreur null lorsque la méthode est appelée par l'écouteur d'actions. Je vais lire le lien inclus par @SergiyMedvynskyy. Désolé pour le doublon. Merci. – p3ace