Skip to content

Commit 449d280

Browse files
author
BarbDev
committed
on avance un peu, ca prend forme
1 parent 4d69c44 commit 449d280

File tree

8 files changed

+160
-21
lines changed

8 files changed

+160
-21
lines changed

src/main/java/bdd/BaseDeDonnee.java

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package bdd;
22

3-
import java.sql.Connection;
4-
import java.sql.DriverManager;
5-
import java.sql.SQLException;
3+
import java.math.BigDecimal;
4+
import java.sql.*;
5+
import java.util.ArrayList;
6+
import java.util.List;
67

78
/**
89
* TODO : mettre a jour les expirations de location de film (à chaque lancement ?)
@@ -18,7 +19,7 @@ public BaseDeDonnee() {
1819
* créé automatiquement la BDD si n'existe pas et met les login à "sa" et pwd à ""
1920
* TODO : voir le chiffrement de la BDD (simple option normalement)
2021
*/
21-
bdd = DriverManager.getConnection("jdbc:h2:test", "sa", "");
22+
bdd = DriverManager.getConnection("jdbc:h2:./test", "sa", "");
2223
createTables();
2324

2425
} catch (SQLException e) {
@@ -34,6 +35,33 @@ public BaseDeDonnee() {
3435
public void createTables() {
3536
/* On vérifie que les tables ne sont pas déjà créés. */
3637
/* On crée les tables. */
38+
39+
try {
40+
Statement statement = bdd.createStatement();
41+
statement.execute("CREATE TABLE IF NOT EXISTS films (" +
42+
"id INT AUTO_INCREMENT (0, 1) PRIMARY KEY," +
43+
"titre VARCHAR(255) NOT NULL UNIQUE," +
44+
"duree TINYINT NOT NULL," +
45+
"note DECIMAL NOT NULL," +
46+
"date_sortie DATE NOT NULL," +
47+
"genres VARCHAR(15) NOT NULL," +
48+
"synopsis VARCHAR(1500) NOT NULL," +
49+
"acteurs VARCHAR(300) NOT NULL" +
50+
");");
51+
statement.execute("CREATE TABLE IF NOT EXISTS utilisateurs (" +
52+
"id INT AUTO_INCREMENT (0, 1) PRIMARY KEY," +
53+
"nom VARCHAR(35) NOT NULL," +
54+
"prenom VARCHAR(35) NOT NULL," +
55+
"pseudo VARCHAR(35) NOT NULL UNIQUE," +
56+
"email VARCHAR(35) NOT NULL UNIQUE," +
57+
"films_loue VARCHAR(1000)," +
58+
"solde DECIMAL NOT NULL," +
59+
"role VARCHAR(6) NOT NULL" +
60+
");");
61+
62+
} catch (SQLException e) {
63+
e.printStackTrace();
64+
}
3765
}
3866

3967
/* TODO :
@@ -61,7 +89,34 @@ public void modifier(Utilisateur user) {
6189
}
6290

6391
public void modifier(Film film) {
92+
try {
93+
PreparedStatement pst = bdd.prepareStatement("UPDATE films" +
94+
"SET titre=?," +
95+
"duree=?," +
96+
"note=?," +
97+
"prix=?," +
98+
"date_sortie=?," +
99+
"genres=?," +
100+
"synopsis=?," +
101+
"acteurs=?" +
102+
"WHERE id = ?;");
103+
pst.setString(1, film.getTitre());
104+
pst.setInt(2, film.getDuree());
105+
pst.setBigDecimal(3, BigDecimal.valueOf(film.getNote()));
106+
pst.setBigDecimal(4, BigDecimal.valueOf(film.getPrix()));
107+
pst.setDate(5, film.getDateSortie());
108+
pst.setString(6, film.getGenre());
109+
pst.setString(7, film.getSynopsis());
64110

111+
StringBuilder st = new StringBuilder();
112+
for (String s : film.getActeurs()) {
113+
st.append(s);
114+
st.append(";");
115+
}
116+
pst.setString(8, st.toString());
117+
} catch (SQLException e) {
118+
e.printStackTrace();
119+
}
65120
}
66121

67122
public void supprimer(Utilisateur user) {
@@ -71,4 +126,31 @@ public void supprimer(Utilisateur user) {
71126
public void supprimer(Film film) {
72127

73128
}
129+
130+
public ArrayList<Film> getBDD() {
131+
ArrayList<Film> films = new ArrayList<>();
132+
133+
try {
134+
ResultSet set = bdd.prepareStatement("SELECT * FROM films").executeQuery();
135+
while (set.next()) {
136+
Film film = new Film(set.getInt("id"),
137+
set.getString("titre"),
138+
set.getInt("duree"),
139+
set.getInt("note"),
140+
set.getBigDecimal("prix").floatValue(),
141+
set.getDate("date_sortie"),
142+
set.getString("genres"),
143+
set.getString("synopsis"),
144+
set.getString("acteurs").split(";"));
145+
films.add(film);
146+
}
147+
} catch (SQLException e) {
148+
e.printStackTrace();
149+
}
150+
return films;
151+
}
152+
153+
static public void main(String[] args) {
154+
BaseDeDonnee baseDeDonnee = new BaseDeDonnee();
155+
}
74156
}

src/main/java/bdd/Film.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
package bdd;
22

3-
import java.util.Date;
4-
import java.util.List;
3+
import java.sql.Date;
54

65
public class Film {
6+
private final int id;
77
private String titre;
88
private int duree;
99
private float note;
1010
private float prix;
1111
private Date dateSortie;
1212
private String genre; // TODO : je sais plus si on a un seul genre par film ou plusieurs (du coup mettre une list)
1313
private String synopsis;
14-
private List<String> acteurs;
14+
private String[] acteurs;
1515

16-
public Film(String titre, int duree, float note, float prix, Date dateSortie, String genre, String synopsis, List<String> acteurs) {
16+
public Film(int id, String titre, int duree, float note, float prix, Date dateSortie, String genre, String synopsis, String[] acteurs) {
17+
this.id = id;
1718
this.titre = titre;
1819
this.duree = duree;
1920
this.note = note;
@@ -80,11 +81,11 @@ public void setSynopsis(String synopsis) {
8081
this.synopsis = synopsis;
8182
}
8283

83-
public List<String> getActeurs() {
84+
public String[] getActeurs() {
8485
return acteurs;
8586
}
8687

87-
public void setActeurs(List<String> acteurs) {
88+
public void setActeurs(String[] acteurs) {
8889
this.acteurs = acteurs;
8990
}
9091

src/main/java/core/Critere.java renamed to src/main/java/core/Criteres/Critere.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package core;
1+
package core.Criteres;
2+
3+
import bdd.Film;
24

35
/**
46
* Je sais pas du tout quoi faire de cette classe...
@@ -11,5 +13,6 @@
1113
* - ajouter une spécialisation Critere
1214
* - ajouter un champ dans LES IHM pour le nouveau criteres...
1315
*/
14-
public class Critere {
16+
public abstract class Critere {
17+
abstract public int evaluate(Film film);
1518
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package core.Criteres;
2+
3+
import bdd.Film;
4+
5+
public class CritereNom extends Critere {
6+
private String nomFilm;
7+
8+
public CritereNom(String nom) {
9+
nomFilm = nom;
10+
}
11+
12+
@Override
13+
public int evaluate(Film film) {
14+
if (nomFilm.equals(film.getTitre())) return 100;
15+
return 0;
16+
}
17+
}

src/main/java/core/MoteurDeRecherche.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import bdd.BaseDeDonnee;
44
import bdd.Film;
5+
import core.Criteres.Critere;
56

6-
import java.util.List;
7+
import java.util.ArrayList;
8+
import java.util.Collections;
79

810
public class MoteurDeRecherche {
911
/**
@@ -12,16 +14,17 @@ public class MoteurDeRecherche {
1214
* TODO : je sais pas trop quand et comment appeler BDD.modifier etc..
1315
* En tout cas faut garder cette liste et la BDD synchronisé
1416
*/
15-
private List<Film> bddTemporaire;
17+
private ArrayList<Film> bddTemporaire;
1618
private BaseDeDonnee bdd;
1719
/**
1820
* Les résultats de la dernière recherche
1921
*/
20-
private List<Resultat> resultats;
22+
private ArrayList<Resultat> resultats = new ArrayList<>();
2123

2224
// TODO : Pas besoin de passer la BDD en paramètre mais l'instancier direct ?!
2325
public MoteurDeRecherche(BaseDeDonnee bdd) {
2426
this.bdd = bdd;
27+
bddTemporaire = bdd.getBDD();
2528
}
2629

2730
/**
@@ -35,7 +38,15 @@ public MoteurDeRecherche(BaseDeDonnee bdd) {
3538
* La list doit être triée.
3639
* @param criteres
3740
*/
38-
public void rechercher(Critere ... criteres) {
39-
41+
public void rechercher(Critere... criteres) {
42+
resultats.clear(); // Nouvelle recherche on supprime l'ancienne
43+
for (Film f : bddTemporaire) {
44+
int score = 0;
45+
for (Critere c : criteres)
46+
score += c.evaluate(f);
47+
Resultat r = new Resultat(f, score);
48+
resultats.add(r);
49+
}
50+
Collections.sort(resultats);
4051
}
4152
}

src/main/java/core/Resultat.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55
import java.util.Date;
66
import java.util.List;
77

8-
/**
8+
/*
99
* Un Résultat est un film qui a un score et que l'on peut donc comparer
1010
* par rapport à leur score.
1111
*/
12-
public class Resultat extends Film implements Comparable<Resultat> {
12+
public class Resultat implements Comparable<Resultat> {
1313
private int score;
14+
private Film film;
1415

15-
public Resultat(String titre, int duree, float note, float prix, Date dateSortie, String genre, String synopsis, List<String> acteurs) {
16-
super(titre, duree, note, prix, dateSortie, genre, synopsis, acteurs);
16+
public Resultat(Film film, int score) {
17+
this.film = film;
18+
this.score = score;
1719
}
1820

1921
@Override

test.mv.db

16 KB
Binary file not shown.

test.trace.db

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2018-01-31 17:47:39 jdbc[3]: exception
2+
org.h2.jdbc.JdbcSQLException: Unknown data type: "VARHCAR"; SQL statement:
3+
CREATE TABLE IF NOT EXISTS utilisateurs (id INT AUTO_INCREMENT (0, 1) PRIMARY KEY,nom VARCHAR(35) NOT NULL,prenom VARCHAR(35) NOT NULL,pseudo VARHCAR(35) NOT NULL UNIQUE,email VARCHAR(35) NOT NULL UNIQUE,films_loue VARCHAR(1000),solde DECIMAL NOT NULL,role VARCHAR(6) NOT NULL); [50004-196]
4+
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
5+
at org.h2.message.DbException.get(DbException.java:179)
6+
at org.h2.message.DbException.get(DbException.java:155)
7+
at org.h2.command.Parser.parseColumnWithType(Parser.java:4169)
8+
at org.h2.command.Parser.parseColumnForTable(Parser.java:4012)
9+
at org.h2.command.Parser.parseCreateTable(Parser.java:6155)
10+
at org.h2.command.Parser.parseCreate(Parser.java:4351)
11+
at org.h2.command.Parser.parsePrepared(Parser.java:366)
12+
at org.h2.command.Parser.parse(Parser.java:321)
13+
at org.h2.command.Parser.parse(Parser.java:293)
14+
at org.h2.command.Parser.prepareCommand(Parser.java:258)
15+
at org.h2.engine.Session.prepareLocal(Session.java:578)
16+
at org.h2.engine.Session.prepareCommand(Session.java:519)
17+
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204)
18+
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)
19+
at org.h2.jdbc.JdbcCallableStatement.<init>(JdbcCallableStatement.java:51)
20+
at org.h2.jdbc.JdbcConnection.prepareCall(JdbcConnection.java:912)
21+
at bdd.BaseDeDonnee.createTables(BaseDeDonnee.java:49)
22+
at bdd.BaseDeDonnee.<init>(BaseDeDonnee.java:22)
23+
at bdd.BaseDeDonnee.main(BaseDeDonnee.java:102)

0 commit comments

Comments
 (0)