Académique Documents
Professionnel Documents
Culture Documents
a e
- Date fin
o s
r s
Programmation Film
e
1..*
m
m
- ID_genre < <PK> > Genre - Type de film - Public concerné - ID_critique < <PK> > Critique
e
1..* 1..* 0..*
- Nom Diffuse u
1..* - Date parution - Note
- Titre
o
- Localisation Interprète
- Nombre de salles - Année - Provenance - ID_acteur < <PK> > Acteur
- Réalisateur
- ID_rôle < <PK> > 1..* - Nom - Nom
Rôle - ID_perso < <PK> >
J
- Prénom - Prénom - Sex
- Sex
Personnage
- Type de personnage - Raison sociale
CREATE TABLE Cinema (
siret INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
adresse TEXT NOT NULL,
ville TEXT NOT NULL,
nbSalles INTEGER NOT NULL
);
CREATE TABLE Film (
idFilm INTEGER PRIMARY KEY ,
titre TEXT NOT NULL,
annee TEXT NOT NULL,
realisateur TEXT NOT NULL,
idG INTEGER NOT NULL,
FOREIGN KEY (idG) REFERENCES Genre (idGenre)
);
-
o
o
o
o
o
o
o
o
o
o
INSERT INTO Film (idFilm, titre, annee, realisateur, idG) VALUES
(0, 'Indiana Jones', 1989, 'Steven Spielberg', 13), /* Action*/
(1,'Matrix', 1999,'Lana & Lilly Wachowski',12), /* Fiction*/ (2,
'MAD MAX: Fury road', 2015,'George Miller',13),/* Action*/
(3,'Skyfall', 2012,'Sam Mendes',10),/* Espionnage*/
(4, 'Interstellar', 2014, 'Christopher Nolan', 12), /* Fiction*/ (5,
'Vilaine', 1945, 'Jean Berry Benes & Allan Mauduit', 11), /* Comédie*/ (6,
'Qu’est-ce qu’on a fait au bon dieu ?', 2014, 'Philippe de Chauveron', 11),
(7,'Qu’est-ce qu’on a encore fait au bon dieu ?', 2019,'Philippe de
Chauveron',11);
.
-- Requête 6: Liste des films (titre) dans un cinéma (choisir un nom du cinéma)
visibles à une date donnée (choisir une date),
SELECT titre
FROM Film
JOIN Programmation
ON Film.idFilm = Programmation.idF
JOIN Cinema
ON Programmation.idCine = Cinema.siret
WHERE Cinema.nom = 'CGR Angoulême' AND '2014-12-10' BETWEEN dateDebut AND dateFin;
-- Requête 7: Liste des titres de films avec la note moyenne donnée par les
critiques SELECT titre, AVG(note)
FROM Film
JOIN Critique
ON Film.idFilm = Critique.idF
GROUP BY titre;
-- Requête 8: Liste des films (titre) ayant été diffusés à Nantes dans au moins
deux cinémas à une date donnée (choisir une date),
CREATE VIEW Diffusion AS
SELECT titre
FROM Film
JOIN Programmation
ON Film.idFilm = Programmation.idF
JOIN Cinema
ON Programmation.idCine = Cinema.siret
WHERE Cinema.ville = 'Nantes'
AND '1989-09-10' BETWEEN dateDebut AND dateFin;
// Locating DataBase
String location=getLocationOfDataBase("DBcinema.db");
// Connecting DataBase
String url="jdbc:sqlite:"+location;
connection = DriverManager.getConnection(url);
try {
Code
}
catch (Exception e)
{
// Failure
System.out.println("Echec de la connexion");
e.printStackTrace();
}
connection.close();
// Menu
System.out.println("\nMenu :");
System.out.println("\t1 - Trouver un film a partir de la date de diffusion et du
genre"); System.out.println("\t2 - Inserer une nouvelle programmation\n");
System.out.print("Faites votre choix : ");
Console :
Menu :
1 - Trouver un film a partir de la date de diffusion et du genre
2 - Inserer une nouvelle programmation
// Executing query
switch(choice)
{
case 1:
requete_1(connection);
break;
case 2:
requete_3(connection);
break;
}
statement = connection.createStatement();
resultset = statement.executeQuery(query);
String query =
"SELECT idFilm, titre FROM Film \n" +
"JOIN Genre ON Film.idG = Genre.idGenre \n" +
"JOIN Programmation ON Film.idFilm = Programmation.idF \n" +
"WHERE type = '" +type+ "' AND '" +date+ "' BETWEEN dateDebut AND dateFin\
n" + "GROUP BY titre\n" +
"ORDER BY idFilm;";
// Display result
if(!resultset.next()) System.out.println("Aucun film de ce genre trouvé à cette
date."); else {
System.out.println("Liste des films :");
System.out.println("\t"+resultset.getInt("idFilm")+ " - "+
resultset.getString("titre"));
while(resultset.next()) {
System.out.println("\t"+resultset.getInt("idFilm")+ " - "+
resultset.getString("titre"));
}
}
Console:
Menu :
1 - Trouver un film a partir de la date de diffusion et du genre
2 - Inserer une nouvelle programmation
Commande SQL :
SELECT idFilm, titre FROM Film
JOIN Genre ON Film.idG = Genre.idGenre
JOIN Programmation ON Film.idFilm = Programmation.idF
WHERE type = 'Science fiction' AND '2014-10-10' BETWEEN dateDebut AND
dateFin GROUP BY titre
ORDER BY idFilm;
Liste des films :
4 - Interstellar
Console :
Quel film souhaitez-vous regarder :x4x
Commande SQL :
SELECT nom, adresse, ville FROM Cinema
JOIN Programmation ON Cinema.siret = Programmation.idCine
JOIN Film ON Film.idFilm = Programmation.idF
WHERE idFilm = '4' AND '2014-10-10' BETWEEN dateDebut AND dateFin ;
2 - UGC Atlantis
12bis Rue des Carmélites
Nantes
3 - CGR Angoulême
30 Rue Saint-Roch
Angoulêmes
4 - Cinéma de la Cité
60 Avenue de Cognac
Angoulême
→
Console :
Menu :
1 - Trouver un film a partir de la date de diffusion et du genre
2 - Inserer une nouvelle programmation
Nouvelle programmation.
Film : Matrix
-- supression de table dans l'ordre inverse de création pour supprimer les clef
associé avant la réalisation des tables
DROP TABLE Acteur ;
DROP TABLE Casting;
DROP TABLE Role;
DROP TABLE Personnage;
DROP TABLE Critique;
DROP TABLE Genre;
DROP TABLE Programmation;
DROP TABLE Film;
DROP TABLE Cinema;
(26,'Liberation','06/1999',2,1),
(27,'Les Echos','06/1999',1,1),
/*Critique Film MAD MAX */
(28,'L Express','05/2015',4,2),
(29,'Metro','05/2015',4,2),
(30,'Charlie Hebdo','05/2015',3,2),
(31,'Le Monde','05/2015',3,2),
/*Critique Film Skyfall */
(32,'20 Minutes','10/2012',4,3),
(33,'Paris Match','10/2012',4,3),
(34,'Le journal du Dimanche','10/2012',3,3),
(35,'L Humanité','10/2012',1,3),
/*Critique Film Interstellar */
(36,'Closer','11/2014',4,4),
(37,'Voici','11/2014',4,4),
(38,'Première','11/2014',3,4),
(39,'Téléramea','11/2014',3,4),
(40,'La voix du Nord','11/2014',2,4),
/*Critique Film Vilaine*/
(41,'Cahiers du Cinema','04/1945',2,5),
(42,'France Soir','04/1945',1,5),
(43,'Le Monde','04/1945',3,5),
(44,'Les Echos','04/1945',0,5),
/*Critique Qu'est ce qu'on a fait au bon dieu ? */
(45,'20 Minutes','11/2011',4,6),
(46,'Télé 7 jours','11/2011',3.5,6),
(47,'Libération','11/2011',2,6),
(48,'La Croix','11/2011',2,6),
/*Critique Qu'est ce qu'on a fait au bon dieu ? */
(49,'Metro','11/2011',4,7),
(50,'Télé 7 jours','11/2011',3,7),
(51,'Le Journal du Dimanche','11/2011',2,7),
(52,'Les Fiches du Cinéma','11/2011',1,7);
-- Requête 2: Liste des journaux ayant donné des notes supérieur ou égale à
3 SELECT provenance, note,idf
FROM Critique
WHERE note >= 3;
-- Requête 3: Liste des journaux ayant donné une note supérieure à la moyenne
globale des notes
SELECT provenance, note,idf
FROM Critique
WHERE note >= (SELECT AVG(note)
FROM Critique);
-- Requête 5: Liste des critiques (provenance et étoile) pour un film donné (titre,
année)
SELECT titre, annee, provenance, note
FROM Film
JOIN Critique
ON Critique.idF = Film.idFilm
WHERE titre = 'Interstellar' AND '11/2014';
-- Requête 6: Liste des films (titre) dans un cinéma (choisir un nom du cinéma)
visibles à une date donnée (choisir une date),
SELECT titre
FROM Film
JOIN Programmation
ON Film.idFilm = Programmation.idF
JOIN Cinema
ON Programmation.idCine = Cinema.siret
WHERE Cinema.nom = 'CGR Angoulême' AND '2014-12-10' BETWEEN dateDebut AND dateFin;
-- Requête 7: Liste des titres de films avec la note moyenne donnée par les
critiques SELECT titre, AVG(note)
FROM Film
JOIN Critique
ON Film.idFilm = Critique.idF
GROUP BY titre;
-- Requête 8: Liste des films (titre) ayant été diffusés à Nantes dans au moins deux
cinémas à une date donnée (choisir une date),
CREATE VIEW Diffusion AS
SELECT titre
FROM Film
JOIN Programmation
ON Film.idFilm = Programmation.idF
JOIN Cinema
ON Programmation.idCine = Cinema.siret
WHERE Cinema.ville = 'Nantes'
AND '1989-09-10' BETWEEN dateDebut AND dateFin;
-- Requête 11: Listes des actrices n’ayant jamais joué dans des comédies,
SELECT prenom, nom
FROM Acteur
JOIN Casting
ON Acteur.idActeur = Casting.idA
JOIN Film
ON Casting.idF = Film.idFilm
JOIN Genre
ON Film.idG = Genre.idGenre
WHERE sexe = 'F' AND type != 'Comédie';
-- Requête 12 : Liste des acteurs (sexe masculin) ayant joué le rôle de détective
dans un film réalisé par un réalisateur donné (nom du réalisateur), SELECT nom,
prenom
FROM Acteur
JOIN Casting
ON Acteur.idActeur = Casting.idA
JOIN Personnage
ON Casting.idP = Personnage.idPerso
JOIN Role
ON Personnage.idR = Role.idRole
JOIN Film
ON Casting.idF = Film.idFilm
WHERE sexe = 'M' AND raisonSociale = 'espion' AND realisateur = 'Sam Mendes';
-- Requête 13: Liste des couples d’acteurs (un acteur et une actrice) n’ayant jamais
joué ensemble dans un même film.
CREATE VIEW ActeursFilms AS
SELECT nom, prenom, titre
FROM Acteur
JOIN Casting
ON Acteur.idActeur = Casting.idA
JOIN Film
ON Casting.idF = Film.idFilm
WHERE sexe = 'M';
/* ------------------------------------------------------------------------ *
Acces a une base de donnees dont le nom est contenu dans la chaine
dbFileName.
* On suppose que la base de donnees est dans le meme dossier que le projet
Java.
* Verifiez bien que c'est le cas en consultant Eclipse :
* La localisation du projet est donne par le menu
Project/Properties/Resource/Location.
* Ce dossier doit etre le meme que celui renfermant la base de donnees. *
----------------------------------------------------------------------*/
import java.io.File;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.*;
public class Acces {
// Requete 1
// Trouver un film a partir de la date de diffusion et du genre
public static void requete_1(Connection connection) {
Statement statement = null;
ResultSet resultset = null;
+ "GROUP BY titre\n"
+ "ORDER BY idFilm;";
// Executing query
try
{
statement = connection.createStatement();
resultset = statement.executeQuery(query);
// Display result
if(!resultset.next()) System.out.println("Aucun film de
ce genre trouvé à cette date.");
else {
System.out.println("Liste des films :");
System.out.println("\t"+resultset.getInt("idFilm")+
" - "+ resultset.getString("titre"));
while(resultset.next()) {
// Close Scanner
sc.close();
}
// Requete 2
// Trouver le cinema dans lequel est programmé le film choisi (a
partir de son ID)
public static void requete_2(Connection connection, String date) {
Statement statement = null;
ResultSet resultset = null;
// Executing query
try
{
statement = connection.createStatement();
resultset = statement.executeQuery(query);
// Display result
if(!resultset.next()) System.out.println("Aucun cinema ne
propose ce film"); // Ne devrait jamais arriver a ce stade else {
System.out.println("Liste des cinemas proposant la
diffusion :");
System.out.println("1 -\t"
+resultset.getString("nom")+ "\n\t" +resultset.getString("adresse")+ "\n\t"
+resultset.getString("ville"));
int i=1;
while(resultset.next()) {
i++;
System.out.println("\n" +i+ " -\t"
+resultset.getString("nom")+ "\n\t" +resultset.getString("adresse")+ "\n\t"
+resultset.getString("ville"));
}
}
}
// If error
catch (Exception e) {
e.printStackTrace();
}
// Close Scanner
sc.close();
}
// Requete 3
// Insérer une nouvelle programmation
public static void requete_3(Connection connection) {
Statement statement = null;
ResultSet resultset = null;
String query;
int idProg = 0, idF = 0;
double idCine = 0;
// Determine ID programmation
query = "SELECT MAX(idProg) FROM Programmation;";
try
{
statement = connection.createStatement();
resultset = statement.executeQuery(query);
e.printStackTrace();
}
// Retrieve information
Scanner sc = new Scanner(System.in);
System.out.println("\nNouvelle programmation.");
query =
"SELECT idFilm FROM Film\n"
+ "WHERE titre = '" +film+ "';" ;
try
{
statement = connection.createStatement();
resultset = statement.executeQuery(query);
// Read ID Film
idF = resultset.getInt("idFilm");
}
// If error
catch (Exception e) {
e.printStackTrace();
}
query =
"SELECT siret FROM Cinema\n"
+ "WHERE nom = '" +cinema+ "';" ;
try
{
statement = connection.createStatement();
resultset = statement.executeQuery(query);
// Read ID Cine
idCine = resultset.getDouble("siret");
}
// If error
catch (Exception e) {
e.printStackTrace();
}
System.out.println("\tdateFin = \t"+dateFin);
System.out.println("\tidCine = \t"+idCine);
// Scheduling
// Creating SQL query
query =
"INSERT INTO Programmation VALUES ("
+ idProg + ", '"
+ dateDebut +"', '"
+ dateFin + "', "
+ idF + ", "
+ idCine + ")";
System.out.println("\n"+query);
try
{
int val = statement.executeUpdate(query);
System.out.println("Nombre de lignes détruites : "+val);
}
// If error
catch (Exception e) {
e.printStackTrace();
}
// Close Scanner
sc.close();
}
// Menu
System.out.println("\nMenu :");
System.out.println("\t1 - Trouver un film a partir de la
date de diffusion et du genre");
System.out.println("\t2 - Inserer une nouvelle
programmation\n");
System.out.print("Faites votre choix : ");
// Executing query
switch(choice)
{
case 1:
requete_1(connection);
break;
case 2:
requete_3(connection);
break;
}
// Close Scanner
sc.close();
}
// Connection Failure
catch (Exception e)
{
// Failure
System.out.println("Echec de connexion");
e.printStackTrace();
}
finally
{
try
{
connection.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}