Spring boot: "this.jdbcTemplate" is null"
Résolu
Rune188
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
Rune188 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Rune188 Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'essaye de faire une application web qui utilise:
SpringBoot
Mysql
JDBC
Design pattern: MVC, DAO
Thymeleaf
Et IntelliJ
j'essaye simplement d'afficher le contenu d'une table de ma db mais j'obtien toujours le message d'ereur suivant:
(j'ai verifié que la connexion à la base de donnée dans "application.properties" et le probleme ne semble pas venir de la connexion à la db)
"java.lang.NullPointerException: Cannot invoke "org.springframework.jdbc.core.JdbcTemplate.query(String, org.springframework.jdbc.core.RowMapper)" because "this.jdbcTemplate" is null"
Controlleur:
mon model:
DAO:
j'essaye de faire une application web qui utilise:
SpringBoot
Mysql
JDBC
Design pattern: MVC, DAO
Thymeleaf
Et IntelliJ
j'essaye simplement d'afficher le contenu d'une table de ma db mais j'obtien toujours le message d'ereur suivant:
(j'ai verifié que la connexion à la base de donnée dans "application.properties" et le probleme ne semble pas venir de la connexion à la db)
"java.lang.NullPointerException: Cannot invoke "org.springframework.jdbc.core.JdbcTemplate.query(String, org.springframework.jdbc.core.RowMapper)" because "this.jdbcTemplate" is null"
Controlleur:
@Controller public class LoginController { @GetMapping("/") public String firstPage(){ return "loginPage"; } @GetMapping("/authentification") public String auth(Model model){ DiabeticDAO diaDao = new DiabeticDAO(); List<Diabetic> listDia = diaDao.getAllDiab(); model.addAttribute("listdia",listDia); return "afficheTest"; } }
mon model:
import java.sql.Date; public class Diabetic { private int id_diabetic; private int id_doctor; private String name; private String firstname; private Date birthdate; private String mail; private String password; private String phone; private String emergencyContact; private String address; public Diabetic(){ } public Diabetic(int id_diabetic, int id_doctor, String name, String firstname, Date birthdate, String mail, String password, String phone, String emergencyContact, String address) { this.id_diabetic = id_diabetic; this.id_doctor = id_doctor; this.name = name; this.firstname = firstname; this.birthdate = birthdate; this.mail = mail; this.password = password; this.phone = phone; this.emergencyContact = emergencyContact; this.address = address; } public int getId_diabetic(){ return id_diabetic; } public void setId_diabetic(int id_diabetic) { this.id_diabetic = id_diabetic; } public int getId_doctor(){ return id_doctor; } public void setId_doctor(int id_doctor) { this.id_doctor = id_doctor; } public String getName(){ return name; } public void setName(String name) { this.name = name; } public String getFirstname(){ return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public Date getBirthdate(){ return birthdate; } public void setBirthdate(Date birthdate) { this.birthdate = birthdate; } public String getMail(){ return mail; } public void setMail(String mail) { this.mail = mail; } public String getPassword(){ return password; } public void setPassword(String password) { this.password = password; } public String getPhone(){ return phone; } public void setPhone(String phone) { this.phone = phone; } public String getEmergencyContact(){ return emergencyContact; } public void setEmergencyContact(String emergencyContact) { this.emergencyContact = emergencyContact; } public String getAddress(){ return address; } public void setAddress(String address) { this.address = address; } }
DAO:
@Repository public class DiabeticDAO { @Autowired public JdbcTemplate jdbcTemplate; //@Autowired public SimpleJdbcInsert simpleJdbcInsert; @Autowired public void setDataSource(DataSource dataSource){ this.jdbcTemplate = new JdbcTemplate(dataSource); this.simpleJdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("diabetic") .usingGeneratedKeyColumns("id_diabetic"); } public Diabetic getDiabById(int id){ return jdbcTemplate.queryForObject("select * from Diabetic where id_diabetic=?", new DiabeticRowMapper(),id); } public List<Diabetic> getAllDiab(){ return jdbcTemplate.query("select * from Diabetic",new DiabeticRowMapper()); } public boolean loggin(String mail, String mdp) { DiabeticDAO diaDao = new DiabeticDAO(); List<Diabetic> listDia = diaDao.getAllDiab(); for (int i = 0; i < listDia.size(); i++) { if((listDia.get(i).getMail().equals(mail))&&(listDia.get(i).getPassword().equals(mdp))) { return true; } } return false; } private final class DiabeticRowMapper implements RowMapper<Diabetic> { @Override public Diabetic mapRow(ResultSet rs, int rowNum) throws SQLException{ Diabetic diabetic = new Diabetic(); diabetic.setId_diabetic(rs.getInt("id_diabetic")); diabetic.setId_doctor(rs.getInt("id_doctor")); diabetic.setName(rs.getString("name")); diabetic.setFirstname(rs.getString("firstname")); diabetic.setBirthdate(rs.getDate("birthdate")); diabetic.setMail(rs.getString("mail")); diabetic.setPassword(rs.getString("password")); diabetic.setPhone(rs.getString("phone")); diabetic.setEmergencyContact(rs.getString("emergencyContact")); diabetic.setAddress(rs.getString("address")); return diabetic; } } }
A voir également:
- Because "this.jdbctemplate" is null
- Dual boot - Guide
- Hiren's boot - Télécharger - Divers Utilitaires
- Boot camp - Télécharger - Systèmes d'exploitation
- Clé boot windows - Guide
- Hiren's BootCD - Télécharger - Divers Utilitaires
1 réponse
Bonjour,
Il ne faut pas faire
NB. dans DiabeticDAO la méthode setDataSource n'a rien à faire là, ce n'est pas à toi de créer des objets JdbcTemplate vu qu'ils sont injectés par Spring.
Il ne faut pas faire
DiabeticDAO diaDao = new DiabeticDAO();dans LoginController car cela va construire un nouvel objet DiabeticDAO au lieu d'utiliser celui instancié par Spring qui peut s'obtenir via un
@Autowired DiabeticDAO diaDaoet qui sera bien initialisé avec une valeur dans chaque @Autowired et en particulier celui du JdbcTemplate
NB. dans DiabeticDAO la méthode setDataSource n'a rien à faire là, ce n'est pas à toi de créer des objets JdbcTemplate vu qu'ils sont injectés par Spring.
Merci :)