Bonjour à tous,
J'utilise le pattern DAO pour effectuer la liaison avec ma base mysql.
Tous ce passe bien. Mais si je laisse le pc tourné toute la nuit avec le programme. Le lendemain, le programme fonctionne sans erreur, sauf qu'il ne renvoi plus aucune donnée.
Base utilisée: MYSQL (WAMP SERVEUR)
Architecture de mes classes:
JdbcConnector
DAOFactory
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import javax.swing.JOptionPane; public class JdbcConnector { /** * URL de connection */ private static String url = "jdbc:mysql://localhost/bcsg"; /** * Nom du user */ private static String user = "root"; /** * Mot de passe du user */ private static String passwd = "*****"; /** * Objet Connection */ private static Connection connect; /** * Méthode qui va retourner notre instance * et la créer si elle n'existe pas... * @return */ public static Connection getInstance(){ if(connect == null){ try { connect = DriverManager.getConnection(url, user, passwd); } catch (SQLException e) { JOptionPane.showMessageDialog(null, e.getMessage(), "ERREUR DE CONNEXION ! ", JOptionPane.ERROR_MESSAGE); } } return connect; } }
DAO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class DAOFactory { protected static final Connection conn = JdbcConnector.getInstance(); /** * Retourne un objet Noms interagissant avec la BDD * @return */ public static DAO getMembresDAO(){ return new MembresDao(conn); } public static DAO getBoissonsDAO(){ return new BoissonsDao(conn); } public static DAO getConsommationsDAO(){ return new ConsommationsDao(conn); } public static DAO getApprovisionnement_compte_boissonsDAO(){ return new Approvisionnement_compte_boissonsDao(conn); } public static DAO getType_paiementDAO(){ return new Type_paiementDao(conn); } }
BoissonsDao (table exemples)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public abstract class DAO<T> { protected Connection connect = null; /** * Constructeur * @param conn */ public DAO(Connection conn){ this.connect = conn; } /** * Méthode de création * @param obj * @return */ public abstract boolean create(T obj); /** * Méthode de comptage * @param obj * @return */ public abstract T count(); /** * Méthode pour effacer * @param obj * @return */ public abstract T count(String champ, String valeur); /** * Méthode pour effacer * @param obj * @return */ public abstract int id_max(); /** * Méthode d'envoi de résultats * @return */ public abstract boolean delete(int id); /** * Méthode de mise à jour * @param obj * @return */ public abstract boolean update(T obj, int id); /** * Méthode de recherche des informations * @param id * @return */ public abstract T find(int id); /** * Méthode d'envoi de résultats * @return */ public abstract ArrayList<T> select(); /** * Méthode d'envoi de résultats * @return condition champ et valeur */ public abstract ArrayList<T> select(String champ, String valeur, int admin); }
Utilisation dans la vue du pattern MVC:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 public class BoissonsDao extends DAO<Boissons> { public BoissonsDao(Connection conn) { super(conn); } public boolean create(Boissons obj) { return false; } public boolean delete(int id) { return false; } public Boissons find(int id) { Boissons noms = new Boissons(); try { Statement result = this.connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); PreparedStatement prepare = this.connect.prepareStatement( "SELECT boissons.id, boissons.ordre, boissons.nom, boissons.doses, boissons.nb_doses, boissons.quantites, boissons.afficher, boissons_prix.prix, boissons_prix.prix_reel, boissons_prix.date" + " FROM boissons LEFT JOIN boissons_prix ON boissons.id=boissons_prix.id_boissons WHERE boissons.id = ? ORDER BY boissons_prix.id DESC"); //On paramètre notre requête préparée prepare.setInt(1, id); //On exécute la requête ResultSet resultat = prepare.executeQuery(); if(resultat.first()) noms = new Boissons(id, resultat.getInt("ordre"), resultat.getString("nom"), resultat.getInt("doses"), resultat.getInt("boissons.nb_doses"), resultat.getInt("boissons.quantites"), resultat.getInt("boissons.afficher"), resultat.getFloat("prix"), resultat.getFloat("prix_reel"), resultat.getDate("date")); } catch (SQLException e) { e.printStackTrace(); } return noms; } public ArrayList<Boissons> select() { ArrayList<Boissons> list_boissons = new ArrayList<Boissons>();// tableau multi-dimensionnel try { Statement result = this.connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); PreparedStatement prepare = this.connect.prepareStatement( "SELECT boissons.id, boissons.ordre, boissons.nom, boissons.doses, boissons.nb_doses, boissons.quantites, boissons.afficher, boissons_prix.prix, boissons_prix.prix_reel, boissons_prix.date" + " FROM boissons LEFT JOIN boissons_prix ON boissons.id=boissons_prix.id_boissons WHERE boissons_prix.id IS NULL OR boissons_prix.id IN ( SELECT MAX(id) FROM boissons_prix GROUP BY id_boissons)"); //On exécute la requête ResultSet resultat = prepare.executeQuery(); int i=0; while(resultat.next()){ list_boissons.add(i, new Boissons(resultat.getInt("id"), resultat.getInt("ordre"), resultat.getString("nom"), resultat.getInt("doses"), resultat.getInt("boissons.nb_doses"), resultat.getInt("boissons.quantites"), resultat.getInt("boissons.afficher"), resultat.getFloat("prix"), resultat.getFloat("prix_reel"), resultat.getDate("date"))); i++; } } catch (SQLException e) { e.printStackTrace(); } return list_boissons; } public Boissons count() { Boissons noms = new Boissons(); try { Statement result = this.connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); PreparedStatement prepare = this.connect.prepareStatement("SELECT COUNT(*) FROM boissons"); //On exécute la requête ResultSet resultat = prepare.executeQuery(); if(resultat.next()) noms.setNombre(resultat.getInt(1)); } catch (SQLException e) { e.printStackTrace(); } return noms; } public boolean update(Boissons obj, int id) { return false; } public boolean update(int id, int nouvelle_quantite, String operateur) { String operateur_sql = (operateur=="consommation") ? "-" : "+"; try { this.connect.createStatement(); PreparedStatement prepare = this.connect.prepareStatement( "UPDATE boissons SET quantites=`quantites`"+operateur_sql+"? WHERE `id`=?"); //On paramètre notre requête préparée prepare.setInt(1, nouvelle_quantite); prepare.setInt(2, id); //On exécute la requête prepare.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return false; } @Override public int id_max() { // TODO Auto-generated method stub return 0; } @Override public ArrayList<Boissons> select(String champ, String valeur, int admin) { // TODO Auto-generated method stub return null; } @Override public Boissons count(String champ, String valeur) { // TODO Auto-generated method stub return null; } }
Test.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 DAO<Boissons> boissonsDao = DAOFactory.getBoissonsDAO(); // On compte le nombre de boissons System.out.println("\tNombres de membres : " + boissonsDao.count().getNombre()); // On fait notre recherche noms = boissonsDao.select(); for (int i = 1; i < boissonsDao.count().getNombre() + 1; i++) { list_boissons.add(i - 1, new ArrayList<String>()); list_boissons.get(i - 1).add(0, noms.get(i - 1).getNom()); list_boissons.get(i - 1).add(1, String.valueOf(noms.get(i - 1).getPrix())); list_boissons.get(i - 1).add(2, String.valueOf(noms.get(i - 1).getAfficher())); list_boissons.get(i - 1).add(3, String.valueOf(noms.get(i - 1).getOrdre())); list_boissons.get(i - 1).add(4, String.valueOf(noms.get(i - 1).getId())); System.out.println("\tBoissons N°" + noms.get(i - 1).getId() + " - Ordre N°" + noms.get(i - 1).getOrdre() + " - NOM : " + noms.get(i - 1).getNom() + " - Dose Ok : " + noms.get(i - 1).getId_dose_ok() + " - Nb de doses : " + noms.get(i - 1).getNb_dose() + " - Quantités : " + noms.get(i - 1).getQuantites() + " - Affichage : " + noms.get(i - 1).getAfficher() + " - Prix : " + noms.get(i - 1).getPrix() + " - Prix reel : " + noms.get(i - 1).getPrix_reel() + " - Date : " + noms.get(i - 1).getDate()); }
J'obtiens la liste des noms sans problème. Mais si j'attends le lendemain (le pc ce met en veille "sans arrêt de disque") au moment ou je clique sur mon bouton : il ne m'affiche plus les données de la base et ne m'indique pas d'erreur de connexion.
En gros il se connecte toujours a la bdd et ne retourne plus aucun résultat.
Est ce que ça peut venir d'un paramètre de WAMP ? avec une limite de temps.
Si vous avez des idées!
Merci.![]()
Partager