:!: en cours de construction :!:
Statement s = connection.createStatement();
ResultSet rs = s.executeQuery(
"SELECT * FROM etudiant WHERE formation='m1info'");
while(rs.next()) {
String nom = rs.getString("nom");
long id = rs.getLong("id");
System.out.println("Etudiant: "+nom+" ("+id+")");
}
cur = connection.cursor()
cur.execute("SELECT * FROM etudiant WHERE formation='m1info'")
for row in cur.fetchall():
nom = row[1] # nom
id = row[0] # numero
print("Etudiant: " + nom + " (" + str(id) + ")")
connection.close()
public class Etudiant {
private int numero;
private String nom;
private String formation;
public Etudiant(int numero, String nom, String formation) {
this.numero = numero;
this.nom = nom;
this.formation = formation;
}
public void save(Connection cnx) throws SQLException {
PreparedStatement pstat = cnx.prepareStatement(
"INSERT INTO etudiant(numero, nom, formation) "
+"VALUES (?,?,?)");
pstat.setInt(1, numero);
pstat.setString(2, nom);
pstat.setString(3, formation);
pstat.executeUpdate();
}
public void update(Connection cnx) throws SQLException {
PreparedStatement pstat = cnx.prepareStatement(
"UPDATE etudiant "
+"SET nom=?, formation=? "
+"WHERE numero=?");
pstat.setString(1, nom);
pstat.setString(2, formation);
pstat.setInt(3, numero);
pstat.executeUpdate();
}
public static Etudiant getByNum(int num, Connection cnx)
throws SQLException {
PreparedStatement pstat = cnx.prepareStatement(
"SELECT numero,nom,formation FROM etudiant "
+"WHERE numero=?");
pstat.setInt(1, num);
ResultSet rs = pstat.executeQuery();
if (rs.next()) {
return new Etudiant(rs.getInt("numero"),
rs.getString("nom"),
rs.getString("formation") );
} else {
return null;
}
}
class Etudiant:
def __init__(self, numero, nom, formation):
self.numero = numero
self.nom = nom
self.formation = formation
def save(self, cnx):
cur = cnx.cursor()
cur.execute(
"""
INSERT INTO etudiant(numero,nom,formation)
VALUES (%s,%s,%s)
""",
(self.numero, self.nom, self.formation),
)
def update(self, cnx):
cur = cnx.cursor()
cur.execute(
"""
UPDATE etudiant
SET nom=%s, formation=%s
WHERE numero=%s
""",
(self.nom, self.formation, self.numero),
)
def getEtudiantByNum(num, cnx):
cur = cnx.cursor()
cur.execute(
"""
SELECT numero, nom, formation
FROM etudiant
WHERE numero=%s
""",
(num,))
row = cur.fetchone()
if row is not None:
return Etudiant(row[0], row[1], row[2])
else:
return None
À condition de bien développer
=> ORM: Object Relational Mapping
EntityManager
Pas d’API standardisée
Instancier des objets
selon le résultats des requêtes
Exécuter des requêtes
pour mettre à jour les données en base
Cas simple
Identifier chaque instance
par une donnée
(la base de données ne connaît pas les pointeurs)
champ(s) ↔︎ clé primaire
Également utile pour les problématiques de cache
package mif04.orm;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity // annotation indiquant une classe
// à lier à la base de données
public class Etudiant {
@Id // le champ numéro identifie un étudiant
private int numero;
private String nom;
private String formation;
// ...
}
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Etudiant(Base):
__tablename__ = "etudiant"
numero = Column(Integer, primary_key=true)
nom = Column(String)
formation = Column(String)
CREATE TABLE etudiant(
numero INTEGER PRIMARY KEY,
nom text,
formation text
)
EntityManager em =
Persistence
.createEntityManagerFactory("pu-orm")
.createEntityManager();
À faire une seule fois par contexte d’exécution
Etudiant e = new Etudiant();
e.setNom("Toto");
e.setFormation("m1info");
e.setNumero(12345678);
em.getTransaction().begin();
em.persist(e);
em.getTransaction().commit();