2
2
3
3
import org .h2 .tools .Csv ;
4
4
5
- import java .io .*;
6
- import java .math .BigDecimal ;
7
5
import java .sql .*;
8
- import java .util .ArrayList ;
6
+ import java .util .HashMap ;
9
7
10
8
/**
11
9
* TODO : mettre a jour les expirations de location de film (à chaque lancement ?)
12
10
*/
13
11
public class BaseDeDonnee {
14
12
private Connection bdd ;
13
+ private HashMap <String , Table > tables = new HashMap <>();
15
14
16
15
public BaseDeDonnee () {
17
16
try {
@@ -22,298 +21,28 @@ public BaseDeDonnee() {
22
21
* TODO : voir le chiffrement de la BDD (simple option normalement)
23
22
*/
24
23
bdd = DriverManager .getConnection ("jdbc:h2:./test" , "sa" , "" );
25
- //createTables(null, null);
26
-
24
+ tables .put ("films" , new TableFilms (this ));
25
+ tables .put ("utilisateurs" , new TableUtilisateurs (this ));
26
+
27
27
} catch (SQLException e ) {
28
28
e .printStackTrace ();
29
29
} catch (ClassNotFoundException e1 ) {
30
30
e1 .printStackTrace ();
31
31
}
32
32
}
33
33
34
-
35
- public void createTables (String csvFilm , String csvUser ) {
36
- /* On vérifie que les tables ne sont pas déjà créés. */
37
- /* On crée les tables. */
38
- String films = "" , users = "" ;
39
- /*if (csvFilm != null && csvUser != null) {
40
- films = "as select * from CSVREAD('"+csvFilm+"', null, 'fieldSeparator=|')";
41
- users = "as select * from CSVREAD('"+csvUser+"', null, 'fieldSeparator=|')";
42
- } */
43
-
44
- try {
45
- Statement statement = bdd .createStatement ();
46
- deleteAll ();
47
- statement .execute ("CREATE TABLE IF NOT EXISTS films (" +
48
- "id INT AUTO_INCREMENT (0, 1) PRIMARY KEY," +
49
- "titre VARCHAR(255) NOT NULL UNIQUE," +
50
- "duree SMALLINT NOT NULL," +
51
- "note DECIMAL NOT NULL," +
52
- "prix DECIMAL NOT NULL," +
53
- "date_sortie DATE NOT NULL," +
54
- "genres VARCHAR(15) NOT NULL," +
55
- "synopsis VARCHAR(1500) NOT NULL," +
56
- "acteurs VARCHAR(300) NOT NULL" +
57
- ") " + films +";" );
58
- statement .execute ("CREATE TABLE IF NOT EXISTS utilisateurs (" +
59
- "id INT AUTO_INCREMENT (0, 1) PRIMARY KEY," +
60
- "nom VARCHAR(35) NOT NULL," +
61
- "prenom VARCHAR(35) NOT NULL," +
62
- "pseudo VARCHAR(35) NOT NULL UNIQUE," +
63
- "email VARCHAR(35) NOT NULL UNIQUE," +
64
- "films_loue VARCHAR(1000)," +
65
- "solde DECIMAL NOT NULL," +
66
- "role VARCHAR(6) NOT NULL," +
67
- "pwd VARCHAR(256) NOT NULL" +
68
- ") " + users +";" );
69
-
70
- } catch (SQLException e ) {
71
- e .printStackTrace ();
72
- }
73
- }
74
-
75
- /* TODO :
76
- * Doit y avoir moyen de simplifier tout ca.
77
- * Créer une classe/interface Table, avoir deux spécifications, TableUtilisateur et TableFilm
78
- * Avoir qu'une seule méthode pr ajouter/modifier/supprimer quelque soit le type ?!
79
- */
80
34
/**
81
- * Ajoute une entrée à la BDD
82
- * TODO : définir ce qui fait qu'un utilisateur est unique (je dirais le PSEUDO)
83
- * @param user l'utilisateur à ajouter (contient déjà toutes les données nécessaire).
84
- *
85
- * Doit provoquer une erreur/exception lorsque le speudo est déjà utilisé.
35
+ * Retourne la connection à la BDD
36
+ * TODO : devrait être enlevé et prévoir des méthodes qui permettent une certaines abstraction (cf. execute())
37
+ * @return
86
38
*/
87
- public void ajouter (Utilisateur user , String pwd ) {
88
- try {
89
- PreparedStatement pst = bdd .prepareStatement ("INSERT INTO utilisateurs (" +
90
- "nom," +
91
- "prenom," +
92
- "pseudo," +
93
- "email," +
94
- "solde," +
95
- "role," +
96
- "pwd" +
97
- ") values (?,?,?,?,?,?,?);" );
98
- pst .setString (1 , user .getNom ());
99
- pst .setString (2 , user .getPrenom ());
100
- pst .setString (3 , user .getPseudo ());
101
- pst .setString (4 , user .getEmail ());
102
- if (user .getRole ().equals ("user" ))
103
- pst .setBigDecimal (5 , BigDecimal .valueOf (((Client ) user ).getSolde ()));
104
- else
105
- pst .setBigDecimal (5 , BigDecimal .valueOf (0 ));
106
- pst .setString (6 , user .getRole ());
107
- pst .setString (7 , pwd );
108
- pst .executeUpdate ();
109
- pst .close ();
110
- } catch (SQLException e ) {
111
- e .printStackTrace ();
112
- }
113
- }
114
-
115
- public void ajouter (Film film ) {
116
- try {
117
- PreparedStatement pst = bdd .prepareStatement ("INSERT INTO films (" +
118
- "titre," +
119
- "duree," +
120
- "note," +
121
- "prix," +
122
- "date_sortie," +
123
- "genres," +
124
- "synopsis," +
125
- "acteurs" +
126
- ") values (?,?,?,?,?,?,?,?);" );
127
- pst .setString (1 , film .getTitre ());
128
- pst .setInt (2 , film .getDuree ());
129
- pst .setBigDecimal (3 , BigDecimal .valueOf (film .getNote ()));
130
- pst .setBigDecimal (4 , BigDecimal .valueOf (film .getPrix ()));
131
- pst .setDate (5 , film .getDateSortie ());
132
- pst .setString (6 , film .getGenre ());
133
- pst .setString (7 , film .getSynopsis ());
134
-
135
- StringBuilder st = new StringBuilder ();
136
- for (String s : film .getActeurs ()) {
137
- st .append (s );
138
- st .append (";" );
139
- }
140
- pst .setString (8 , st .toString ());
141
- pst .executeUpdate ();
142
- pst .close ();
143
- } catch (SQLException e ) {
144
- e .printStackTrace ();
145
- }
39
+ public Connection getConnection () {
40
+ return bdd ;
146
41
}
147
42
148
- public void modifier (Utilisateur user , String pwd ) {
149
- try {
150
- PreparedStatement pst = bdd .prepareStatement ("UPDATE utilisateurs" +
151
- "SET nom=?," +
152
- "prenom=?," +
153
- "pseudo=?," +
154
- "email=?," +
155
- "solde=?," +
156
- "role=?," +
157
- "films_loue=?," +
158
- "pwd=?" +
159
- "WHERE id = ?;" );
160
- pst .setString (1 , user .getNom ());
161
- pst .setString (2 , user .getPrenom ());
162
- pst .setString (3 , user .getPseudo ());
163
- pst .setString (4 , user .getEmail ());
164
- if (user .getRole ().equals ("user" )) {
165
- pst .setBigDecimal (5 , BigDecimal .valueOf (((Client ) user ).getSolde ()));
166
- pst .setString (7 , Client .formatFilmsForBDD ((Client )user ));
167
- }
168
- else {
169
- pst .setBigDecimal (5 , BigDecimal .valueOf (0 ));
170
- pst .setString (7 , "" );
171
- }
172
- pst .setString (6 , user .getRole ());
173
- pst .setString (8 , pwd );
174
- pst .setInt (9 , user .getId ());
175
- pst .executeUpdate ();
176
- pst .close ();
177
- } catch (SQLException e ) {
178
- e .printStackTrace ();
179
- }
180
- }
181
43
182
- public void modifier (Film film ) {
183
- try {
184
- PreparedStatement pst = bdd .prepareStatement ("UPDATE films" +
185
- "SET titre=?," +
186
- "duree=?," +
187
- "note=?," +
188
- "prix=?," +
189
- "date_sortie=?," +
190
- "genres=?," +
191
- "synopsis=?," +
192
- "acteurs=?" +
193
- "WHERE id = ?;" );
194
- pst .setString (1 , film .getTitre ());
195
- pst .setInt (2 , film .getDuree ());
196
- pst .setBigDecimal (3 , BigDecimal .valueOf (film .getNote ()));
197
- pst .setBigDecimal (4 , BigDecimal .valueOf (film .getPrix ()));
198
- pst .setDate (5 , film .getDateSortie ());
199
- pst .setString (6 , film .getGenre ());
200
- pst .setString (7 , film .getSynopsis ());
201
-
202
- StringBuilder st = new StringBuilder ();
203
- for (String s : film .getActeurs ()) {
204
- st .append (s );
205
- st .append (";" );
206
- }
207
- pst .setString (8 , st .toString ());
208
- pst .executeUpdate ();
209
- pst .close ();
210
- } catch (SQLException e ) {
211
- e .printStackTrace ();
212
- }
213
- }
214
-
215
- public void supprimer (Utilisateur user ) {
216
- try {
217
- PreparedStatement pst = bdd .prepareStatement ("DELETE FROM utilisateurs" +
218
- "WHERE id=?;" );
219
- pst .setInt (1 , user .getId ());
220
- pst .executeUpdate ();
221
- pst .close ();
222
- } catch (SQLException e ) {
223
- e .printStackTrace ();
224
- }
225
- }
226
-
227
- public void supprimer (Film film ) {
228
- try {
229
- PreparedStatement pst = bdd .prepareStatement ("DELETE FROM films" +
230
- "WHERE id=?;" );
231
- pst .setInt (1 , film .getId ());
232
- pst .executeUpdate ();
233
- pst .close ();
234
- } catch (SQLException e ) {
235
- e .printStackTrace ();
236
- }
237
- }
238
-
239
- public ArrayList <Film > getFilms () {
240
- ArrayList <Film > films = new ArrayList <>();
241
-
242
- try {
243
- ResultSet set = bdd .prepareStatement ("SELECT * FROM films" ).executeQuery ();
244
- while (set .next ()) {
245
- Film film = new Film (set .getInt ("id" ),
246
- set .getString ("titre" ),
247
- set .getInt ("duree" ),
248
- set .getInt ("note" ),
249
- set .getBigDecimal ("prix" ).floatValue (),
250
- set .getDate ("date_sortie" ),
251
- set .getString ("genres" ),
252
- set .getString ("synopsis" ),
253
- set .getString ("acteurs" ).split (";" ));
254
- films .add (film );
255
- }
256
- set .close ();
257
- } catch (SQLException e ) {
258
- e .printStackTrace ();
259
- }
260
- return films ;
261
- }
262
-
263
-
264
- public Film getFilm (String titre ) {
265
- Film film = null ;
266
- try {
267
- PreparedStatement pst = bdd .prepareStatement ("SELECT * FROM films WHERE titre = ?" );
268
- pst .setString (1 , titre );
269
- ResultSet set = pst .executeQuery ();
270
- while (set .next ()) {
271
- film = new Film (set .getInt ("id" ),
272
- set .getString ("titre" ),
273
- set .getInt ("duree" ),
274
- set .getInt ("note" ),
275
- set .getBigDecimal ("prix" ).floatValue (),
276
- set .getDate ("date_sortie" ),
277
- set .getString ("genres" ),
278
- set .getString ("synopsis" ),
279
- set .getString ("acteurs" ).split (";" ));
280
- }
281
- set .close ();
282
- } catch (SQLException e ) {
283
- e .printStackTrace ();
284
- }
285
- return film ;
286
- }
287
-
288
- /**
289
- *
290
- * @param pseudo
291
- * @param pwd
292
- * @return null si pas le bon login
293
- */
294
- public Utilisateur getUser (String pseudo , String pwd ) {
295
- Utilisateur user = null ;
296
- try {
297
- PreparedStatement pst = bdd .prepareStatement ("SELECT * FROM utilisateurs WHERE pseudo = ?;" );
298
- pst .setString (1 , pseudo );
299
- ResultSet set = pst .executeQuery ();
300
- if (set .next ()) {
301
- if (set .getString ("role" ).equals ("user" )) {
302
- user = new Client (set .getInt ("id" ),
303
- pseudo , set .getString ("nom" ), set .getString ("prenom" ),
304
- set .getString ("email" ), set .getString ("role" ),
305
- set .getBigDecimal ("solde" ).floatValue (), Client .formatFilmsForClient (set .getString ("films_loue" ), this ));
306
- } else {
307
- user = new Utilisateur (set .getInt ("id" ),
308
- pseudo , set .getString ("nom" ), set .getString ("prenom" ),
309
- set .getString ("email" ), set .getString ("role" ));
310
- }
311
- }
312
- set .close ();
313
- } catch (SQLException e ) {
314
- e .printStackTrace ();
315
- }
316
- return user ;
44
+ public void createTable (Table t , String csv ) {
45
+ t .create (csv );
317
46
}
318
47
319
48
public void addFromCSV (String path , String table ) {
@@ -337,16 +66,10 @@ public void addFromCSV(String path, String table) {
337
66
}
338
67
}
339
68
340
- public void deleteAll () {
341
- Statement statement = null ;
342
- try {
343
- statement = bdd .createStatement ();
344
- statement .execute ("DROP TABLE IF EXISTS films, utilisateurs;" );
345
- } catch (SQLException e ) {
346
- e .printStackTrace ();
347
- }
348
- }
349
-
69
+ /**
70
+ * Permet d'executer une action simple sur la BDD (sans paramètre ni retour)
71
+ * @param action l'action au format SQL à effectuer
72
+ */
350
73
public void execute (String action ) {
351
74
try {
352
75
Statement statement = bdd .createStatement ();
@@ -361,9 +84,9 @@ static public void main(String[] args) {
361
84
BaseDeDonnee baseDeDonnee = new BaseDeDonnee ();
362
85
//baseDeDonnee.ajouter(new Film(1, "Mr Bean", 160, 7.8f, 20, new Date(Date.valueOf("1994-6-10").getTime()),
363
86
// "drole", "Mr bean par en vacs :D", new String[]{"Le magnifique", "lul"}));
364
- baseDeDonnee .createTables (null , null );
87
+ baseDeDonnee .createTable (null , null );
365
88
366
- for (Film f : baseDeDonnee .getFilms ())
367
- System .out .println (f );
89
+ // for (Film f : baseDeDonnee.getFilms())
90
+ // System.out.println(f);
368
91
}
369
92
}
0 commit comments