1
1
package bdd ;
2
2
3
+ import java .io .*;
3
4
import java .math .BigDecimal ;
4
5
import java .sql .*;
5
6
import java .util .ArrayList ;
6
- import java .util .List ;
7
7
8
8
/**
9
9
* TODO : mettre a jour les expirations de location de film (à chaque lancement ?)
@@ -20,7 +20,7 @@ public BaseDeDonnee() {
20
20
* TODO : voir le chiffrement de la BDD (simple option normalement)
21
21
*/
22
22
bdd = DriverManager .getConnection ("jdbc:h2:./test" , "sa" , "" );
23
- createTables ();
23
+ createTables (null , null );
24
24
25
25
} catch (SQLException e ) {
26
26
e .printStackTrace ();
@@ -29,16 +29,19 @@ public BaseDeDonnee() {
29
29
}
30
30
}
31
31
32
- /**
33
- * Va créer les tables Utilisateur et Film si besoin
34
- */
35
- public void createTables () {
32
+
33
+ public void createTables (String csvFilm , String csvUser ) {
36
34
/* On vérifie que les tables ne sont pas déjà créés. */
37
35
/* On crée les tables. */
36
+ String films = "" , users = "" ;
37
+ if (csvFilm != null && csvUser != null ) {
38
+ films = "as select * from CSVREAD('" +csvFilm +"', null, 'rowseparator=|')" ;
39
+ users = "as select * from CSVREAD('" +csvUser +"', null, 'rowseparator=|')" ;
40
+ }
38
41
39
42
try {
40
43
Statement statement = bdd .createStatement ();
41
- statement . execute ( "DROP TABLE IF EXISTS films, utilisateurs;" );
44
+ deleteAll ( );
42
45
statement .execute ("CREATE TABLE IF NOT EXISTS films (" +
43
46
"id INT AUTO_INCREMENT (0, 1) PRIMARY KEY," +
44
47
"titre VARCHAR(255) NOT NULL UNIQUE," +
@@ -49,7 +52,7 @@ public void createTables() {
49
52
"genres VARCHAR(15) NOT NULL," +
50
53
"synopsis VARCHAR(1500) NOT NULL," +
51
54
"acteurs VARCHAR(300) NOT NULL" +
52
- ");" );
55
+ ") " + films + " ;" );
53
56
statement .execute ("CREATE TABLE IF NOT EXISTS utilisateurs (" +
54
57
"id INT AUTO_INCREMENT (0, 1) PRIMARY KEY," +
55
58
"nom VARCHAR(35) NOT NULL," +
@@ -58,8 +61,9 @@ public void createTables() {
58
61
"email VARCHAR(35) NOT NULL UNIQUE," +
59
62
"films_loue VARCHAR(1000)," +
60
63
"solde DECIMAL NOT NULL," +
61
- "role VARCHAR(6) NOT NULL" +
62
- ");" );
64
+ "role VARCHAR(6) NOT NULL," +
65
+ "pwd VARCHAR(256) NOT NULL" +
66
+ ") " + users +";" );
63
67
64
68
} catch (SQLException e ) {
65
69
e .printStackTrace ();
@@ -78,8 +82,32 @@ public void createTables() {
78
82
*
79
83
* Doit provoquer une erreur/exception lorsque le speudo est déjà utilisé.
80
84
*/
81
- public void ajouter (Utilisateur user ) {
82
-
85
+ public void ajouter (Utilisateur user , String pwd ) {
86
+ try {
87
+ PreparedStatement pst = bdd .prepareStatement ("INSERT INTO utilisateurs (" +
88
+ "nom," +
89
+ "prenom," +
90
+ "pseudo," +
91
+ "email," +
92
+ "solde," +
93
+ "role," +
94
+ "pwd" +
95
+ ") values (?,?,?,?,?,?,?);" );
96
+ pst .setString (1 , user .getNom ());
97
+ pst .setString (2 , user .getPrenom ());
98
+ pst .setString (3 , user .getPseudo ());
99
+ pst .setString (4 , user .getEmail ());
100
+ if (user .getRole ().equals ("user" ))
101
+ pst .setBigDecimal (5 , BigDecimal .valueOf (((Client ) user ).getSolde ()));
102
+ else
103
+ pst .setBigDecimal (5 , BigDecimal .valueOf (0 ));
104
+ pst .setString (6 , user .getRole ());
105
+ pst .setString (7 , pwd );
106
+ pst .executeUpdate ();
107
+ pst .close ();
108
+ } catch (SQLException e ) {
109
+ e .printStackTrace ();
110
+ }
83
111
}
84
112
85
113
public void ajouter (Film film ) {
@@ -115,8 +143,38 @@ public void ajouter(Film film) {
115
143
}
116
144
}
117
145
118
- public void modifier (Utilisateur user ) {
119
-
146
+ public void modifier (Utilisateur user , String pwd ) {
147
+ try {
148
+ PreparedStatement pst = bdd .prepareStatement ("UPDATE utilisateurs" +
149
+ "SET nom=?," +
150
+ "prenom=?," +
151
+ "pseudo=?," +
152
+ "email=?," +
153
+ "solde=?," +
154
+ "role=?," +
155
+ "films_loue=?," +
156
+ "pwd=?" +
157
+ "WHERE id = ?;" );
158
+ pst .setString (1 , user .getNom ());
159
+ pst .setString (2 , user .getPrenom ());
160
+ pst .setString (3 , user .getPseudo ());
161
+ pst .setString (4 , user .getEmail ());
162
+ if (user .getRole ().equals ("user" )) {
163
+ pst .setBigDecimal (5 , BigDecimal .valueOf (((Client ) user ).getSolde ()));
164
+ pst .setString (7 , Client .formatFilmsForBDD ((Client )user ));
165
+ }
166
+ else {
167
+ pst .setBigDecimal (5 , BigDecimal .valueOf (0 ));
168
+ pst .setString (7 , "" );
169
+ }
170
+ pst .setString (6 , user .getRole ());
171
+ pst .setString (8 , pwd );
172
+ pst .setInt (9 , user .getId ());
173
+ pst .executeUpdate ();
174
+ pst .close ();
175
+ } catch (SQLException e ) {
176
+ e .printStackTrace ();
177
+ }
120
178
}
121
179
122
180
public void modifier (Film film ) {
@@ -153,14 +211,30 @@ public void modifier(Film film) {
153
211
}
154
212
155
213
public void supprimer (Utilisateur user ) {
156
-
214
+ try {
215
+ PreparedStatement pst = bdd .prepareStatement ("DELETE FROM utilisateurs" +
216
+ "WHERE id=?;" );
217
+ pst .setInt (1 , user .getId ());
218
+ pst .executeUpdate ();
219
+ pst .close ();
220
+ } catch (SQLException e ) {
221
+ e .printStackTrace ();
222
+ }
157
223
}
158
224
159
225
public void supprimer (Film film ) {
160
-
226
+ try {
227
+ PreparedStatement pst = bdd .prepareStatement ("DELETE FROM films" +
228
+ "WHERE id=?;" );
229
+ pst .setInt (1 , film .getId ());
230
+ pst .executeUpdate ();
231
+ pst .close ();
232
+ } catch (SQLException e ) {
233
+ e .printStackTrace ();
234
+ }
161
235
}
162
236
163
- public ArrayList <Film > getBDD () {
237
+ public ArrayList <Film > getFilms () {
164
238
ArrayList <Film > films = new ArrayList <>();
165
239
166
240
try {
@@ -184,13 +258,79 @@ public ArrayList<Film> getBDD() {
184
258
return films ;
185
259
}
186
260
261
+
262
+ public Film getFilm (String titre ) {
263
+ Film film = null ;
264
+ try {
265
+ PreparedStatement pst = bdd .prepareStatement ("SELECT * FROM films WHERE titre = ?" );
266
+ pst .setString (1 , titre );
267
+ ResultSet set = pst .executeQuery ();
268
+ while (set .next ()) {
269
+ film = new Film (set .getInt ("id" ),
270
+ set .getString ("titre" ),
271
+ set .getInt ("duree" ),
272
+ set .getInt ("note" ),
273
+ set .getBigDecimal ("prix" ).floatValue (),
274
+ set .getDate ("date_sortie" ),
275
+ set .getString ("genres" ),
276
+ set .getString ("synopsis" ),
277
+ set .getString ("acteurs" ).split (";" ));
278
+ }
279
+ set .close ();
280
+ } catch (SQLException e ) {
281
+ e .printStackTrace ();
282
+ }
283
+ return film ;
284
+ }
285
+
286
+ /**
287
+ *
288
+ * @param pseudo
289
+ * @param pwd
290
+ * @return null si pas le bon login
291
+ */
292
+ public Utilisateur getUser (String pseudo , String pwd ) {
293
+ Utilisateur user = null ;
294
+ try {
295
+ PreparedStatement pst = bdd .prepareStatement ("SELECT * FROM utilisateurs WHERE pseudo = ?;" );
296
+ pst .setString (1 , pseudo );
297
+ ResultSet set = pst .executeQuery ();
298
+ if (set .next ()) {
299
+ if (set .getString ("role" ).equals ("user" )) {
300
+ user = new Client (set .getInt ("id" ),
301
+ pseudo , set .getString ("nom" ), set .getString ("prenom" ),
302
+ set .getString ("email" ), set .getString ("role" ),
303
+ set .getBigDecimal ("solde" ).floatValue (), Client .formatFilmsForClient (set .getString ("films_loue" ), this ));
304
+ } else {
305
+ user = new Utilisateur (set .getInt ("id" ),
306
+ pseudo , set .getString ("nom" ), set .getString ("prenom" ),
307
+ set .getString ("email" ), set .getString ("role" ));
308
+ }
309
+ }
310
+ set .close ();
311
+ } catch (SQLException e ) {
312
+ e .printStackTrace ();
313
+ }
314
+ return user ;
315
+ }
316
+
317
+ public void deleteAll () {
318
+ Statement statement = null ;
319
+ try {
320
+ statement = bdd .createStatement ();
321
+ statement .execute ("DROP TABLE IF EXISTS films, utilisateurs;" );
322
+ } catch (SQLException e ) {
323
+ e .printStackTrace ();
324
+ }
325
+ }
326
+
187
327
static public void main (String [] args ) {
188
328
BaseDeDonnee baseDeDonnee = new BaseDeDonnee ();
189
329
baseDeDonnee .ajouter (new Film (1 , "Mr Bean" , 160 , 7.8f , 20 , new Date (Date .valueOf ("1994-6-10" ).getTime ()),
190
330
"drole" , "Mr bean par en vacs :D" , new String []{"Le magnifique" , "lul" }));
191
331
192
332
193
- for (Film f : baseDeDonnee .getBDD ())
333
+ for (Film f : baseDeDonnee .getFilms ())
194
334
System .out .println (f );
195
335
}
196
336
}
0 commit comments