Skip to content

Commit b84706e

Browse files
author
BarbDev
committed
ca patine
1 parent e4525fc commit b84706e

18 files changed

+396
-374
lines changed

src/main/java/bdd/BaseDeDonnee.java

Lines changed: 19 additions & 296 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,15 @@
22

33
import org.h2.tools.Csv;
44

5-
import java.io.*;
6-
import java.math.BigDecimal;
75
import java.sql.*;
8-
import java.util.ArrayList;
6+
import java.util.HashMap;
97

108
/**
119
* TODO : mettre a jour les expirations de location de film (à chaque lancement ?)
1210
*/
1311
public class BaseDeDonnee {
1412
private Connection bdd;
13+
private HashMap<String, Table> tables = new HashMap<>();
1514

1615
public BaseDeDonnee() {
1716
try {
@@ -22,298 +21,28 @@ public BaseDeDonnee() {
2221
* TODO : voir le chiffrement de la BDD (simple option normalement)
2322
*/
2423
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+
2727
} catch (SQLException e) {
2828
e.printStackTrace();
2929
} catch (ClassNotFoundException e1) {
3030
e1.printStackTrace();
3131
}
3232
}
3333

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-
*/
8034
/**
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
8638
*/
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;
14641
}
14742

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-
}
18143

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);
31746
}
31847

31948
public void addFromCSV(String path, String table) {
@@ -337,16 +66,10 @@ public void addFromCSV(String path, String table) {
33766
}
33867
}
33968

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+
*/
35073
public void execute(String action) {
35174
try {
35275
Statement statement = bdd.createStatement();
@@ -361,9 +84,9 @@ static public void main(String[] args) {
36184
BaseDeDonnee baseDeDonnee = new BaseDeDonnee();
36285
//baseDeDonnee.ajouter(new Film(1, "Mr Bean", 160, 7.8f, 20, new Date(Date.valueOf("1994-6-10").getTime()),
36386
// "drole", "Mr bean par en vacs :D", new String[]{"Le magnifique", "lul"}));
364-
baseDeDonnee.createTables(null, null);
87+
baseDeDonnee.createTable(null, null);
36588

366-
for (Film f : baseDeDonnee.getFilms())
367-
System.out.println(f);
89+
//for (Film f : baseDeDonnee.getFilms())
90+
// System.out.println(f);
36891
}
36992
}

0 commit comments

Comments
 (0)