Documente Academic
Documente Profesional
Documente Cultură
Rappels
API JDBC
Pilotes JDBC
Connexion
ResultSet
Requtes interprtes
Requtes prpares
Reprsentation graphique
Schma relationnel
schma entit/association
A
attr
schma relationnel
- tables A et B
- la cl de A devient un attribut de B
( cl trangre)
- tables A et B
- table AB pour l'association
avec cl=(cl A,cl B)
- attribut de l'association = attribut de la
table AB
Mysql
Types mysql :
CHAR(n)
INTEGER
VARCHAR(n)
DECIMAL(m,n)
DATE
TIME
DATETIME
TEXT
chane de longueur n
entier
chane de longueur <=n
m= longueur partie entire, n=lg partie dcimale
jour, mois, an
heure, minutes et secondes (temps sur 24h)
date et horaire
texte de longueur quelconque
Serveur de bases
de donnes
Relationnelles
SQL
Cls
PRIMARY KEY( num)
l'attribut num est la cl primaire
FOREIGN KEY(idad) REFERENCES Personne
la cl trangre idad rfrence la cl primaire de la table Personne
5
Type Java
String
Mthode getter
getString()
INTEGER
int
getInt()
TINYINT
byte
getByte()
SMALLINT
short
getShort()
BIGINT
long
getLong()
BIT
boolean
getBoolean()
REAL
float
getFloat()
FLOAT DOUBLE
double
getDouble()
java.sql.Date
getDate()
TIME
java.sql.Time
getTime()
TIMESTAMP
java.sql.Timestamp
getString()
6
SQL
SELECT attr, ... FROM table, ... WHERE condition
o condition est une expression sur les attributs des tables du FROM
les oprateurs applicables sont :
oprateurs arithmtiques : +,*,-, ...
oprateurs relationnels : <,>,>=,... ,!=
oprateurs logiques : AND, NOT, OR
BETWEEN, IN, LIKE
caractres joker
'_'
remplace n'importe quel caractre
'%'
remplace n'importe quelle chane de caractres
Destruction
DELETE FROM table WHERE condition
Modification
UPDATE table SET attr1=val1,Ai=vali,... WHERE condition
EXEMPLES
SELECT *
FROM Boutique
WHERE nom IN ('Dijon','Lyon')
nom
ventes
date
Dijon
1500
05-Jan-2009
Lyon
2400
21-Jan-2009
nom
ventes
Dijon
1500
SELECT *
FROM Boutique
Chalon 400
WHERE Date BETWEEN '06-Jan-2009' AND '11-Jan-2009'
SELECT *
FROM Boutique
WHERE nom LIKE '%ON%'
date
05-Jan-2009
09-Jan-2009
nom
ventes
date
Dijon
1500
05-Jan-2009
Chalon
400
09-Jan-2009
Lyon
2400
21-Jan-2009
SELECT nom
FROM Boutique
WHERE ventes > 1000 OR (ventes < 500 AND ventes > 275)
8
Introduction JDBC
Architecture 3 tiers
utilisateur
couche
prsentation
interface
web
couche
mtier
(domaine)
couche
d'accs
aux
donnes
BD
11
API JDBC
l'API JDBC se trouve dans le paquetage java.sql
l'API JDBC est constitue d'un ensemble d'interfaces pour interagir
avec des bases de donnes
l'API JDBC ne fournit donc aucune implmentation des comportements
spcifis par les interfaces
l'API JDBC permet d'excuter des instructions SQL et
de rcuprer les rsultats
La version la plus rcente de l'API est la version 3.0
12
13
Gestionnaire de pilotes
DriverManager
DriverManager est une classe, gestionnaire de tous les drivers
chargs par un programme Java
14
Java et les BD
application
Connexion
Connexion
Gestionnaire
Gestionnairede
depilotes
pilotes
Pilote
PiloteOracle
Oracle
Pont
PontJDBC_ODBC
JDBC_ODBC
Pilote
PiloteSybase
Sybase
Pilote
PiloteODBC
ODBC
BD
Oracle
BD
Sybase
BD
ODBC
15
try {
//Dclaration du driver :
Class.forName("com.mysql.jdbc.Driver");
//Url de connexion
String dbUrl="jdbc:mysql://localhost:3306/laboBD";
//Profil/mot de passe
String user = "root";
String password = "19AB5";
//connexion la base
dbcon = DriverManager.getConnection(dbUrl,user,password);
}
17
18
Sqlite : connexion
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection
("jdbc:sqlite:mesdata.mesbds.magss.sqlite");
Fermeture de la connexion
conn.close();
19
3 types de requtes
interface
Statement
interface
PreparedStatement
requtes interprtes
chaque excution
requtes
prcompiles
interface
CallableStatement
requtes stockes
dans la base
20
L'interface ResultSet
21
2 constantes de concurrence :
CONCUR_READ_ONLY ( les donnes du Resultset ne peuvent pas tre modifies)
CONCUR_UPDATABLE ( des modifications de la BD peuvent tre effectues via le
Resultset )
22
Exemple
//
//
//
//
//
Sqlite : cration
Statement stat = conn.createStatement();
stat.executeUpdate("drop table if exists magasins;");
stat.executeUpdate("create table magasins
(id, magasin,produit,prix);");
24
26
27
28
29
30
Sqlite : interrogation
ResultSet rs = stat.executeQuery
("select * from magasins;");
while (rs.next()) {
System.out.println("magasin = " +
rs.getString("magasin"));
System.out.println("produit = " +
rs.getString("produit"));
System.out.println("prix = " +
rs.getString("prix"));
}
rs.close();
31
32
Prnom
Ren
La
Marcel->Robert
Age
54->37
18
43
33
L'interface ResultSetMetaData
34
Exemple
ResultSet rs = stmt.executeQuery( "SELECT * FROM personne" );
StringBuffer resultat = new StringBuffer();
ResultSetMetaData metaData = rs.getMetaData();
int nbCols = metaData.getColumnCount();
for ( int i=1;i<=nbCols;i++ )
resultats.append( metaData.getColumnName( i )+"\t" );
resultats.append( "\n" );
while ( rs.next() ){
for ( int i=1;i<=nbCols;i++ )
// pour simplifier, chaque donne est du type Object
// sinon le type de la valeur est obtenu par getColumnType
resultats.append( rs.getObject( i )+"\t" );
resultats.append( "\n" );
}
35
Requtes prpares
L'excution de chaque requte une BD ncessite 4 tapes :
analyse
compilation
optimisation
Excution
Pour des requtes identiques, les 3 premires tapes n'ont pas tre
effectues de nouveau.
Avec la notion de requte prpare, les 3 premires tapes ne sont
effectues qu'une seule fois.
JDBC propose l'interface PreparedStatement qui drive de l'interface
Statement pour modliser cette notion.
36
On voit que la requte est prpare l'avance et n'est donc pas transmise
en argument au moment de l'excution ( executeQuery()).
37
39
Sqlite : insertion
PreparedStatement prep = conn.prepareStatement(
"insert into magasins (magasin,produit,prix)
values (?, ?, ?);");
prep.setString(1, "fdk");
prep.setString(2, "cafe");
prep.setFloat(3, 0.40f);
prep.addBatch();
prep.setString(1, "fdk");
prep.setString(2, "soda");
prep.setFloat(3, 1.10f);
prep.addBatch();
prep.setString(1, "fdk");
prep.setString(2, "barres");
prep.setFloat(3, 0.90f);
prep.addBatch();
conn.setAutoCommit(false);
prep.executeBatch();
conn.setAutoCommit(true);
40
Intrt :
{call nom-proc-stoke(?,?)}
41
Exercice
Cette BD est accessible avec les identifiants (" root ", " 2dwsk8 ")
prix
.....
.....
Utilisation de sqlite
https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/
Entrer le nom de la BD
Connecter la BD
44