1
BD Multimédia 1
BD Multimédia 1
BD Multimédia 1
BD Multimédia 11
Bases de données Multimédia
Oracle Objet-relationnel et JBDC
JDBC pour les objets
Rappel des bases de jdbc
API Oracle (jdbc sql)
Mappings des objets
Gestion des références
Gestion des collections
Les outils : JPublisher
BD Multimédia 2
Oracle Objet-relationnel et JBDC
JDBC (Java DataBase Connectivity)
JDBC fournit un accès à des données de différentes
sources ( bases de données) à partir d’un programme
java.
L'API JDBC comporte des classes et des interfaces
dans les paquetages
java.sql (gestion des connexions, transmission des requêtes
et traitement des résultats)
javax.sql (côté serveur)
Ces paquetages sont inclus dans la plate-forme Java
Standard Edition (Java SE) .
Oracle propose également une API pour jdbc
BD Multimédia 3
Oracle Objet-relationnel et JBDC
Rappel des bases
API spécifiques JBDC Oracle
Oracle 11g ojbdc6.jar (avec jdk6, jdk7 et jdk8)
Oracle 12c : ojdbc7.jar (avec jdk7 et jdk8)
http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html
Contenu du paquetage java.sql de JDBC (3.0)
BD Multimédia 4
Oracle Objet-relationnel et JBDC
Rappel des bases Interfaces/Classes
java.sql.Driver
java.sql.Connection
Pilotes JDBC pour la connexion aux sources
de données SQL
java.sql.Statement
java.sql.PreparedStatement
java.sql.CallableStatement
Construction d'ordres SQL
java.sql.ResultSet Gestion des résultats des requêtes
java.sql.DriverManager
(Classe
) Gestion des pilotes de connexion
java.sql.SQLException
(Classe
) Gestion des erreurs SQL
java.sql.DataBaseMetaData
java.sql.ResultSetMetaData
Gestion des méta-informations (description
de la base de donnée, des tables, etc.)
Java.sql.SavePoint Gestion des transactions.
BD Multimédia 5
Oracle Objet-relationnel et JBDC
Rappel des bases
Structure d'un programme
import java.sql.*;
import oracle.jdbc.driver.*;
public class JDBCTest
{ public static void main(String args[]) throws SQLException
{try { //Chargement d'un pilote JBDC
// Création d'une connexion
// Ordres SQL
} catch (SQLException e)
{System.out.println("Erreur" + e;}
}}
BD Multimédia 6
Oracle Objet-relationnel et JBDC
Rappel des bases
Connexion à une base
Utilisation de la classe DriverManager
Chargement du pilote
Mise en place de la connexion
Instructions
DriverManager.registerDriver(new oracle.jdbc.driver.OrcaleDriver());
Connection conn=DriverManager.getConnection(...);
Connexion sur Butor
(si l’instance de la base est ensb2017)
jdbc:oracle:thin:@butor:1521:ensb2017
2
BD Multimédia 7
Oracle Objet-relationnel et JBDC
Rappel des bases
Méthodes de l'interface Connection
createStatement Création d'un objet pour recevoir
un ordre SQL non paramétré
prepareStatement(String) Pré-compilation d'un ordre SQL
avec paramètres
prepareCall(String) Appel d'une procédure cataloguée
void setAutoCommit(boolean) Fixe la validation automatique
void commit() Valide la transaction
void rollBack() Invalide la transaction
void close() Ferme la connexion
BD Multimédia 8
Oracle Objet-relationnel et JBDC
Rappel des bases
Interfaces pour l'encapsulation d'ordres SQL en
Java
Statement : pour les ordres SQL statiques. Cet état
est construit par la méthode createStatement
appliquée à la connexion.
PreparedStatement pour les ordres paramétrés SQL,
construits par prepareStatement sur la connexion.
CallableStatement pour les procédures ou fonctions
cataloguées PL/SQL, C, java, etc., construit par la
méthode prepareCall sur la connexion.
BD Multimédia 9
Oracle Objet-relationnel et JBDC
Rappel des bases
Quand un état paramétré est créé, les paramètres sont
insérés par les méthodes génériques
setXXX (num_param, valeur)
setInt, setString, ...
Il existe les méthodes inverses, pour récupérer les
valeurs
getXXX
getInt, getString, ...
Et des méthodes
updateXXX depuis java vers Oracle. Mise à jour de la base via un
curseur java.
BD Multimédia 10
Oracle Objet-relationnel et JBDC
Rappel des bases
Méthodes de l'interface Statement
ResulSet executeQuery(String) Exécute une requête et renvoie un ensemble
de lignes
int executeUpdate(String) Exécute une instruction SQL (insert, update
ou delete) et renvoie le nombre de lignes
traitées.
boolean execute(String) Exécute une instruction SQL.
Connection getConnexion() Renvoie l'objet de la connexion.
void setMaxRows(int) Fixe le nombre max d'enregistrements à
extraire
int getUpdateCount() Nombre de lignes traitées par l'ordre SQL (ou
1)
void close() Ferme l'état
BD Multimédia 11
Oracle Objet-relationnel et JBDC
Rappel des bases
Exemples
Statement st=conn.createStatement();
st.execute("INSERT INTO etudiant
VALUES('123','Dupont,'Paul')");
ResultSet res= st.executeQuery("SELECT * FROM etudiant");
Extraction des données du résultat (pour ResultSet)
Parcours : boolean next()
Fermeture du curseur : void close
Récupération des valeurs : getXXX(int)
Modification de l'enregistrement : updateXXX(...)
Métadonnées : ResultSetMetaData getMetaData()
BD Multimédia 12
Oracle Objet-relationnel et JBDC
Rappel des bases
Un curseur de type ResultSet est par défaut ni navigable, ni
modifiable.
Uniquement du début à la fin par next()
Il est possible de le rendre navigable
Déplacement avant, arrière, depuis le début, la fin ou la position
courante
Et modifiable
La base peut être modifiée par le curseur.
Création d’un curseur navigable et modifiable
Statement createStatement (int typeCur, int modifCur)
ResultSet.TYPE_SCROLL_INSENSITIVE (navigable, non sensible aux
modifications)
ResultSet.TYPE_SCROLL_SENSITIVE (navigable, sensible aux modifications)
3
BD Multimédia 13
Oracle Objet-relationnel et JBDC
Rappel des bases
Il existe un ensemble de méthodes pour
parcourir un curseur navigable.
setFetchDirection, getFetchDirection
beforeFirst, afterLast, previous, next, last,
isBeforeFirst, isAfterLast, isFirst, isLast,
absolute(int), relative(int)
BD Multimédia 14
Oracle Objet-relationnel et JBDC
Rappel des bases
Un curseur modifiable permet de mettre à jour la base
de données
Modification de colonnes, suppressions et insertions
d'enregistrements.
Valeurs du 2ème paramètre de createStatement
ResultSet.CONCUR_READ_ONLY, ResultSet.CONCUR_UPDATABLE
Pour utiliser un curseur de type modifiable, il ne faut avoir ni de
jointure, ni de regroupement dans la requête SELECT.
Méthodes de l ’interface
« Statement »
int getResultSetType()
Renseigne sur la navigabilité des curseurs d'un état
int getResultSetConcurrency()
Renseigne sur le caractère modifiable des curseurs d'un état
BD Multimédia 15
Oracle Objet-relationnel et JBDC
Rappel des bases
Méthodes applicables aux curseurs modifiables de
l’interface « ResultSet »
int getType() Renseigne sur la navigabilité d'un curseur donné
int getConcurrency() Renseigne sur le caractère modifiable d'un curseur donné
void deleteRow() Supprime l'enregistrement en cours
void updateRow() Modifie la table avec l'enregistrement courant.
void moveToInsertRow() Déplace le curseur vers un nouvel enregistrement.
void insertRow() Insère dans la table l'enregistrement courant
void moveToCurrentRow() Retour à l'enregistrement courant (après insertion par exemple)
BD Multimédia 16
Oracle Objet-relationnel et JBDC
Rappel des bases
Les instructions paramétrées : interface
PreparedStatement
Les paramètres sont indiqués par le symbole ?
Les valeurs sont affectées par les méthodes setXXX
Les méthodes de l'interface :
ResultSet executeQuery(),
int executeUpdate () pour INSERT, UPDATE ou
DELETE -> nombre de lignes traitées
boolean execute()
void close()
BD Multimédia 17
Oracle Objet-relationnel et JBDC
Rappel des bases
Exemple
PreparedStatement pst=conn.prepareStatement("SELECT *
FROM etudiant where idE=? ");
pst.setInt(1,100);
ResultSet res= pst.executeQuery();
Extraction des données du résultat (pour ResultSet)
Parcours : boolean next()
Fermeture du curseur : void close
Récupération des valeurs : getXXX(int)
BD Multimédia 18
Oracle Objet-relationnel et JBDC
Rappel des bases
Appel de sous-programmes
L'interface CallableStatement permet d'appeler
des sous-programmes (fonctions ou procédures
PL/SQL, java, C, etc.)
Création des états par prepareCall
CallableStatement prepareCall(String)
Paramètre de la méthode
{? = call nomFonction([?,?,...])}
{call nomProcedure ([?,?,...])}
4
BD Multimédia 19
Oracle Objet-relationnel et JBDC
Rappel des bases
Les paramètres d'entrée sont affectés par les
méthodes setXXX
Les paramètres de sortie sont extraits par les
méthodes getXXX.
Lorsque l'état est créé, il faut :
répertorier le type des paramètres de sortie
méthode RegisterOutParameter(int,int)
passer les paramètres d'entrée,
appeler le sous-programme,
analyser les résultats.
Les méthodes sont similaires à PreparedStatement
excepté la méthode ci-dessus.
Oracle Objet-relationnel et JBDC
Rappel des bases
Exemple
Appel d’une fonction PL/SQL qui prend en paramètre (en
lecture) une chaîne de caractères et retourne un entier.
create function testFunc( a IN VARCHAR2) return integer is …
CallableStatement stmt=
conn.prepareCall("{? = call testFunc(?)}");
stmt.registerOutParameter(1, Types.INTEGER);
stmt.setString(2, "test ");
int i=stmt.getInt(1);
BD Multimédia 20
BD Multimédia 21
Oracle Objet-relationnel et JBDC
API Oracle (jdbc sql)
API Oracle
Oracle fournit une implémentation
(ojdbc7.jar pour Oracle 12c)
de l'API qui inclut les paquetages :
oracle.sql et oracle.jdbc
Il faut aussi inclure le paquetage nls_charset12.jar
(selon la
version de JDK)
pour les drivers « thin » et « oci »
Le paquetage oracle.jdbc comporte les classes/interfaces
suivantes
OracleDriver, OracleConnection, OracleStatement,
OraclePrepareStatement, OracleCallableStatement,
OracleResultSet, OracleResultSetMetaData,
OracleDatabaseMetaData, OracleTypes
BD Multimédia 22
Oracle Objet-relationnel et JBDC
Extensions de l'API d'Oracle
Le paquetage Oracle.sql
Il permet d'accéder directement à des
données au format SQL (types reconnus dans
la base).
oracle.sql.CHAR, oracle.sql.DATE,
oracle.sql.NUMBER, etc.
oracle.sql.STRUCT (pour les objets structurés)
oracle.sql.REF (pour les références)
oracle.sql.ARRAY (pour les tableaux)
BD Multimédia 23
Oracle Objet-relationnel et JBDC
Mappings d'objets
CREATE TYPE etudiant_type AS OBJECT
(IdE VARCHAR(15), nom VARCHAR(20), adresse VARCHAR(100));
/
CREATE TABLE etudiant of etudiant_type;
INSERT INTO etudiant VALUES ('123', 'DUPONT',
'Dijon');
BD Multimédia 24
Oracle Objet-relationnel et JBDC
Mappings d'objets
Exemple : Récupération des résultats
d’une requête
OracleResultSet rset= (OracleResultSet)
st.executeQuery("select e.IdE, e.nom, e.adresse from
etudiant e where e.IdE='123';
while (rset.next())
{ int id=rset.getInt(1);
String n=rset.getString(2);
String ad=reset.getString(3);
...
}
5
BD Multimédia 25
Oracle Objet-relationnel et JBDC
Mappings d'objets
Exemple : Mise à jour d'un étudiant
OraclePreparedStatement ps =
conn.prepareStatement("UPDATE etudiant set
adresse=? where idE=?");
ps.setString(1,'Dijon');
ps.setString(2,'123');
ps.execute();
BD Multimédia 26
Oracle Objet-relationnel et JBDC
Mappings d'objets
Mécanismes pour faire correspondre des objets d'Oracle
(persistants) avec des objets java (non persistants).
Les objets stockés dans la base peuvent être manipulés
à l'aide des interfaces oracle.sql.STRUCT pour l’API
Oracle ou java.sql.Struct pour l’API java.
Typage faible
ou bien, il est possible de construire des types
personnalisés avec les interfaces
Typage fort
À l’aide de oracle.sql.ORAData pour l’API Oracle ou
java.sql.SQLData pour l’API java.
BD Multimédia 27
Oracle Objet-relationnel et JBDC
Mappings d'objets
Interface Oracle STRUCT
Les principales méthodes sont
oracle.sql.Datum[] getOracleAttributes()
Pour récupérer les attributs du type SQL
String getSQLTypeName()
Pour récupérer le nom du type
oracle.sql.StructDescriptor getDescriptor()
Pour récupérer le descripteur du type
java.sql.OracleConnection getOracleConnection()
Retourne la connexion « Oracle » courante
BD Multimédia 28
Oracle Objet-relationnel et JBDC
Mappings d'objets
CREATE TYPE adresse_type as object
(numero INTEGER, rue VARCHAR(50), ville VARCHAR(50));
/
CREATE TYPE etudiant_type AS OBJECT
(IdE VARCHAR(15), nom VARCHAR(20), adresse adresse_type);
/
CREATE TABLE etudiant of etudiant_type;
INSERT INTO etudiant VALUES ('123', 'DUPONT',
'Dijon');
BD Multimédia 29
Oracle Objet-relationnel et JBDC
Mappings d'objets
API Oracle
OracleResultSet rset= (OracleResultSet) st.executeQuery("select
value(e) from etudiant e where e.IdE='123';
while (rset.next())
{
oracle.sql.STRUCT stEtu=rset.getSTRUCT(1);
oracle.sql.Datum[] tabAtt=stEtu.getOracleAttributes();
}
La classe oracle.sql.Datum est une sous-classe de la classe
java.lang.Object.
Il est aussi possible d’écrire :
Object[] tabAtt=stEtu.getOracleAttributes();
BD Multimédia 30
Oracle Objet-relationnel et JBDC
Mappings d'objets
Type composé : avec une adresse de type adresse_type
OracleResultSet rset= (OracleResultSet) st.executeQuery("select value(e)
from etudiant e where e.IdE='123';
while (rset.next())
{oracle.sql.STRUCT stEtu= rset.getSTRUCT(1);
oracle.sql.Datum[] tabAttEtu=stEtu.getOracleAttributes();
String nom = tabAttEtu[1];
oracle.sql.STRUCT stAdr = (STRUCT) tabAttEtu[2];
oracle.sql.Datum[] tabAttAdr=stAdr.getOracle.Attributes();
int noRue=(int) tabAttrAdr[0];
String rue=tabAttrAdr[1].toString;
String ville=tabAttrAdr[2].toString;
...
}
1 / 9 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !