On se place dans le cadre d'une application permettant d'accéder à une base de données de films. Le schéma logique de la base est représenté par le diagramme UML suivant :
CREATE TABLE PEOPLE (pid INTEGER, firstname VARCHAR(30),
lastname VARCHAR(30),
PRIMARY KEY(pid));
CREATE TABLE MOVIE (mid INTEGER, title VARCHAR(90) NOT NULL,
year INTEGER NOT NULL,
runtime INTEGER NOT NULL, rank INTEGER NOT NULL,
PRIMARY KEY (mid));
CREATE TABLE ROLE (mid INTEGER, pid INTEGER, name VARCHAR(70),
PRIMARY KEY(mid, pid, name),
FOREIGN KEY (mid) REFERENCES MOVIE,
FOREIGN KEY (pid) REFERENCES PEOPLE);
CREATE TABLE DIRECTOR (mid INTEGER, pid INTEGER, PRIMARY KEY (mid, pid),
FOREIGN KEY (mid) REFERENCES MOVIE,
FOREIGN KEY (pid) REFERENCES
PEOPLE);
Ici on veut faire une mini-application simplifiée pour rechercher toutes les personnes qui contiennent une chaîne donnée dans leur nom, trié par ordre alphabétique.
On va créer deux classes Java pour le modèle :
public class Person {
private final String firstname;
private final String lastname;
public Person(String f, String l) {
this.firstname = f;
this.lastname = l;
}
public String getFirstname() { return firstname; }
public String getLastname() { return lastname; }
}
Le getter pour une propriété foo est une méthode publique getFoo()
public class PersonDB {
Connection cnx;
public PersonDB() {
Class.forName("org.postgresql.Driver");
cnx = DriverManager.getConnection("jdbc:postgresql://host:port/base",
"username", "password");
}
public List<Person> getPeople (String s) throws SQLException {
List<Person> res = new ArrayList<>();
Statement st = cnx.createStatement();
ResultSet r = st.executeQuery("SELECT * FROM PEOPLE "
+ " WHERE LASTNAME LIKE "
+ " '%" + s + "%'");
while (r.next()) {
res.add(new Person<>(r.getString("FIRSTNAME"),
r.getString("LASTNAME")));
}
return res;
}
}
Class.forName("org.postgresql.Driver");
connection =
DriverManager.getConnection("jdbc:postgresql://host:port/" + base,
username, password);
public boolean deleteDirectorById (int id) throws SQLException {
Statement st = cnx.createStatement();
int r = st.executeUpdate("DELETE FROM DIRECTOR WHERE pid =" + id );
return r != 0;
}
}
-- Requête
SELECT … FROM T1, T2, ... WHERE condition;
SELECT … FROM T1, T2, ... WHERE condition ORDER BY x;
-- Insertion
INSERT INTO T VALUES(v1, v2, ...);
-- Mise à jour
UPDATE T SET col1 = v1, col2 = v2, ... WHERE condition;
-- SUPPRESSION
DELETE FROM T WHERE condition;
-- CREATION DE TABLE
CREATE TABLE T (col1 typ1, col2 typ2, ...)
-- DESTRUCTION DE TABLE
DROP TABLE T;