-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquestion3.java
176 lines (142 loc) · 5.64 KB
/
question3.java
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
import com.mysql.jdbc.*;
/**
* IMPORTANT toutes les méthodes d'éxécutions de requêtes sont des méthodes
* succeptibles de soulever des exceptions et doivent en conséquent
* être entourées par un try ... catch
*/
class Question3{
private static Connection con = null;
/**
* cette méthode permet d'attribuer une valeur à la variable
* con qui est statique donc ne doit s'attribuer qu'une seule
* fois si elle est null.
*/
public static void setConnection(){
if (con != null ) {
//con = connection;
}
}
/**
*
* @return le resultSet contenant les numéros classés par
* type de spectacle et par thème.
*/
public ResultSet getNumeros(){
setConnection();
String query = "SELECT N.codeNumero, N.titre, N.duree, N.theme, n.resume, AVG(E.note) AS note"
+"FROM numeros N, Evaluations E"
+"WHERE N.codeNUmero = E.codeNUmero"
+"GROUP BY N.codeNumero"
+"ORDER BY note DESC;";
Statement st = con.createStatement();
ResulSet rs = st.executeQuery(query);
return rs;
}
/**
*
* @param theme c'est le code du thème donc on veut avoir
* les différents numéros participants
* @return le resultSet contenant les numéros correspondant au
* thème passé en paramètre
*/
public ResultSet getNumerosParTheme(String theme){
setConnection();
String query = "SELECT N.codeNumero, N.titre, N.duree, N.resume, AVG(E.note) AS note"
+"FROM Numeros N, Evaluations E"
+"WHERE N.codeNumero = E.codeNUmero AND N.theme = ?"
+"GROUP BY N.codeNUmero"
+"ORDER BY note DESC;";
PreparedStatement ps = con.prepareStatement(query);
ps.setString(1, theme);
ResultSet rs = ps.executeQuery();
return rs;
}
/**
*
* @return true si tous les numéros qui vont participer à un spectacle
* correspondent bien au thème et false dans d'autres cas.
*/
public boolean verifierSpectacleNumeros(){
setConnection();
boolean coherent = true;
String query = "SELECT N.codeNumero, N.titre, N.theme"
+"FROM Numeros N, Spectacle S, estContenu, EC"
+"WHERE N.codeNumero = EC.codeNumero AND S.codeSpectacle = EC.codeSpectacle"
+"AND N.theme != S.theme;";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
if(rs.hasNext()){
throw new Exception("Le numero "+rs.getString(2)+" de numéro "
+rs.get(1)+"est dans un spectacle de thème différent");
}
return coherent;
}
/**
*
* @return vrai si la durée de tous les spectacles est inférieure
* ou égale à 180 minutes et false dans d'autres cas.
*/
public boolean verifierDureeSpectacles(){
setConnection();
String query = "SELECT S.codeSpectacle, S.jour, S.heure, S.theme SUM(N.duree) AS duree"
+"FROM Spectacles S, Numeros N, EstContenu EC"
+"WHERE S.codeSpectacle = EC.codeSpectacle AND N.codeNumero = EC.codeNumero"
+"GROUP BY S.codeSpectacle"
+"HAVING duree > 180;";
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
if(rs.hasNext()){
throw new Exception("Le spectacle de code "+rs.getInt(1)+
"a une durée supérieure à 180 minutes");
}
return true;
}
/**
*
* @param codeSpectacle code du spectacle auquel on veuta jouter
* un numéro
* @param codeNumero code du numéro qu'on veut ajouter au spectacle
* @return true si le numéro est enregistré au spectacle et la base
* données est cohérente et false dans tous les autres. Si l'enregistrement
* du numéro le spectacle ne permet pas de garder la cohérence, il sera
* annulé.
*/
public boolean addNumeroInSpectacle(int codeSpectacle, int codeNumero){
boolean ajouter = false;
String query;
Statement st = con.createStatement();
PreparedStatement ps;
st.execute("START TRANSACTION ;");
query = "INSERT INTO EstContenu(codeNumero, codeSpectacle)"
+"VALUES( ?, ?);";
ps = con.prepareStatement(query);
ps.setInt(1, codeNumero);
ps.setInt(2, codeSpectacle);
// dans ce cas, la réquête ne s'éxécute pas correctement
// on retourne donc un false.
if( !ps.execute() ) {
return false;
}
query = "SELECT S.codeSpectacle, S.jour, S.heure, S.theme SUM(N.duree) AS duree"
+"FROM Spectacles S, Numeros N, EstContenu EC"
+"WHERE S.codeSpectacle = EC.codeSpectacle AND N.codeNumero = EC.codeNumero"
+"AND S.codeSpectacle = ?";
ps = con.prepareStatement(query);
ps.setInt(1, codeSpectacle);
ResultSet rs = ps.executeQuery();
if(rs.hasNext()){
if(rs.getInt("duree") > 180){
st.execute("ROLLBACK ;");
throw new Exception("la durée du spectacle auquelle vous voulez ajouter"
+"un numéro ne doit pas dépasser 180 minutes");
} else {
st.execute("COMMIT ;");
return true;
}
} else {
st.execute("COMMIT");
return true;
}
return ajouter;
}
}