Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Support Dot Net avec C#. Ce cours traite les points suivants :
- Architecture .Net
- Les bases de C#
- Objet et Classe
- Héritage
- Encapsulation
- Polymorphisme
- Les exceptions
- Les entrées sorties
- Les interfaces graphiques
- Le multi Threading
- Programmation réseaux (Sockets et DataGram)
- Accès aux bases de données
Ce cours vise à présenter le JDBC (Java Database Connectivity) et comment utiliser JDBC à travers des applications Java à d'accéder à des bases de données.
Présentation Hibernate issue de la formation J2EE réalisée par le club CFEM ( club futur entrepreneur en multimédia) au sein de l'institut supérieur d'informatique et multimédia de sfax (ISIMS)
La Java Persistence API (abrégée en JPA), est une interface de programmation Java permettant aux développeurs d'organiser des données relationnelles dans des applications utilisant la plateforme Java.
Overview of EJB technology.
Enterprise Java Beans (EJB) is a server-side component technology for Java EE based systems (JEE).
Beans are business logic components that implement a standard interface through which the bean is hooked into the bean container (= runtime object for bean).
A Java class implementing one of the standard bean interfaces is an Enterprise Java Bean. Beans can be accessed remotely, usually from a client tier.
The EJB standard was developed to provide a common framework for solving recurring problems in business application development like persistence, transactions,
security and runtime and lifecycle management. The EJB standard evolved greatly over time. EJB version 1 and 2 were complex and required to implement many interfaces
and exception handling in EJBs. EJB version 3 brought great simplifications and did away with interfaces by replacing these with annotations which provide greater flexibility while keeping complexity low. EJBs come in 3 different flavors: Stateless and stateful session beans and message driven beans. Entity beans of EJB version 1 and 2 were replaced by the Java Persistence API in EJB version 3.
Ce cours vise à présenter le JDBC (Java Database Connectivity) et comment utiliser JDBC à travers des applications Java à d'accéder à des bases de données.
Présentation Hibernate issue de la formation J2EE réalisée par le club CFEM ( club futur entrepreneur en multimédia) au sein de l'institut supérieur d'informatique et multimédia de sfax (ISIMS)
La Java Persistence API (abrégée en JPA), est une interface de programmation Java permettant aux développeurs d'organiser des données relationnelles dans des applications utilisant la plateforme Java.
Overview of EJB technology.
Enterprise Java Beans (EJB) is a server-side component technology for Java EE based systems (JEE).
Beans are business logic components that implement a standard interface through which the bean is hooked into the bean container (= runtime object for bean).
A Java class implementing one of the standard bean interfaces is an Enterprise Java Bean. Beans can be accessed remotely, usually from a client tier.
The EJB standard was developed to provide a common framework for solving recurring problems in business application development like persistence, transactions,
security and runtime and lifecycle management. The EJB standard evolved greatly over time. EJB version 1 and 2 were complex and required to implement many interfaces
and exception handling in EJBs. EJB version 3 brought great simplifications and did away with interfaces by replacing these with annotations which provide greater flexibility while keeping complexity low. EJBs come in 3 different flavors: Stateless and stateful session beans and message driven beans. Entity beans of EJB version 1 and 2 were replaced by the Java Persistence API in EJB version 3.
Les Servlets
Cycle de vie d'une Servlet
Traitement des données de formulaires
Gestion de l'état avec cookies et sessions
Introduction aux JSP
Les balises JSP personnalisées
Règles de conception
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
Ces nouvelles fonctionnalités introduites à partir de Java 7 nous permettent de parallèliser nos traitements simplement, voire gratuitement. Nous allons donc pouvoir utiliser pleinement nos multicoeurs avec un minimum d'efforts. Quels sont ces nouveaux patterns, quels gains en performance pouvons-nous en attendre, à quels nouveaux bugs serons-nous confrontés ? Une heure pour répondront à chacun de ces points, en introduisant les nouveaux problèmes et leurs solutions. Une heure pour comprendre comment nos habitudes de programmation vont devoir évoluer, et à quoi la programmation parallèle en Java ressemblera-t-elle demain.
Durant cette session, on va vous montrer les différentes fonctions de la Tooling API avec des cas d'utilisations concrets.
Et vous présentera quelques requêtes SOQL en Tooling API utilisable au quotidien ( Dev ou Admin)
Présentation d'un cours en JAVA/J2EE
Création et manipulations des objets en Java
** Connexion JDBC à la base de données
** Modèle en couches
** FrameworkHibernate
** Framewoek Spring MVC
Novascope Télécoms et Réseaux Informatiques en BtoB 2023Enov
Depuis 1996, nous mesurons la digitalisation des entreprises françaises grâce à notre observatoire Novascope Télécoms et Réseaux informatiques en B2B. Découvrez quelques résultats exclusifs de la vague 2023.
Dans un contexte où la transmission et l'installation d'agriculteurs sont des enjeux cruciaux pour la profession agricole, de nouveaux agriculteurs s'installent chaque année et, parmi eux, certains Bac+5 ou plus. Les cursus des écoles d'ingénieurs n'ont pas vocation à former de futurs agriculteurs. Pourtant, certains apprenants ayant suivi ces cursus BAC + 5, qu'ils soient ou non issus du milieu agricole, tentent l'aventure de l'entrepreneuriat agricole. Qui sont-ils ? Quelles sont leurs motivations et visions ? Comment travaillent-ils ?
Webinaire Qui sont les jeunes installés avec un bac +5 ?
Jdbc par4
1. Application BdD et JDBC
1 / 28
Application BdD et JDBC
Anne-C´ecile Caron
Licence MIAGE - Bases de Donn´ees
2013-2014
Application BdD et JDBC
Introduction
2 / 28
Application base de donn´ees
Pour le d´eveloppeur :
I Quel est l’environnement ?
I type de client (mode client serveur, intranet, ...)
I langage utilis´e
I contraintes techniques (machines, OS, logiciels ...)
I Dans tout les cas, une seule probl´ematique
I int´egrer du SQL dans un langage de haut niveau
I g´erer des probl`emes de BD + IHM + r´eseau + ...
I Quelques alternatives :
I Solution propri´etaire, li´ee `a un ´editeur.
I SQL int´egr´e ou comment int´egrer du SQL dans un langage connu.
(norme SQL2)
I utilisation d’API
Application BdD et JDBC
Introduction
3 / 28
JDBC
I API Java = paquetages java.sql (”core”) et javax.sql
(”option”)
I Adopt´e par presque tous les constructeurs
I Plusieurs types de Pilotes en fonction des di↵´erents types de
communication entre le SGBD et le programme java.
I Naissance en 1997, Version 4.0 finalis´ee en novembre 2006, suivie
par Oracle 11g.
Application BdD et JDBC
Introduction
4 / 28
Ce qui est vu ou non dans ce cours
I Nous verrons comment se connecter `a une base, poser des requˆetes,
traiter le r´esultat.
I Nous ne verrons pas les classes li´ees `a une utilisation dans un
environnement J2EE
I Nous ne verrons pas les sp´ecificit´es de la gestion des transactions : le
mode par d´efaut implique une validation (commit) de chaque
instruction envoy´ee au SGBD. On parle de mode auto-commit.
attendre le master pour approfondir le sujet ...
2. Application BdD et JDBC
Introduction
5 / 28
Utilisation de JDBC : les ´etapes
I Charger le pilote (Driver)
I Etablir la connexion avec la base de donn´ees
I Cr´eer une zone de description de requˆete (Statement)
I ex´ecuter la requˆete
I traiter les donn´ees retourn´ees (ResultSet)
I fermer les di↵´erents espaces utilis´es
Application BdD et JDBC
Drivers et Connexion
6 / 28
Chargement du driver
I Disposer d’un driver propri´etaire
I Charger le driver :
DriverManager.registerDriver(unObjetDriver);
DriverManager.registerDriver(
new oracle.jdbc.driver.OracleDriver()
);
I Avec JDBC 4.0, utilisation de Java SE Service Provider : `a la connexion `a
la base, DriverManager charge tous les drivers JDBC4.0 qui sont pr´esents
dans le CLASSPATH.
Application BdD et JDBC
Drivers et Connexion
7 / 28
Obtenir une connexion
I Utilisation d’une m´ethode static de DriverManager
Connection connect
= DriverManager.getConnection(urlBase,
unNomLogin, unPassword);
I Il faut d´efinir dans l’url :
I le protocole et sous-protocole
I l’adresse du SGBD et le nom de la base
String urlBase
= "jdbc:oracle:thin:@oracle.fil.univ-lille1.fr:1521:filora" ;
String urlBase
= "jdbc:postgresql://maMachine/maBase" ;
I Connexion r´eseau conforme internet
Application BdD et JDBC
Ex´ecution d’une requˆete
8 / 28
L’interface Statement
I permet de d´efinir les requˆetes SQL `a envoyer `a la base connect´ee
Statement stmt = connect.createStatement();
I Permet d’ex´ecuter deux types de requˆetes :
I Les requˆetes de modification de la base
I Les requˆetes de consultation de la base
I Toutes les m´ethodes doivent prendre en compte l’exception
SQLException
3. Application BdD et JDBC
Ex´ecution d’une requˆete
9 / 28
Modification de la base
I int executeUpdate(String requeteSQL)
I Valable aussi pour toutes les commandes SQL DDL.
I par exemple :
stmt.executeUpdate("create table tester" +
"(num integer, ch text)") ;
stmt.executeUpdate("insert into tester " +
"values (1,’dupont’)") ;
stmt.executeUpdate("insert into tester "+
"values (2,’durant’)") ;
I retourne le nombre de lignes cr´e´ees, modifi´ees,. . .
Application BdD et JDBC
Ex´ecution d’une requˆete
10 / 28
Consultation de la base
I ResultSet executeQuery(String requeteSQL)
I Exemple :
ResultSet rs1 = stmt.executeQuery(
"select * from tester") ;
ResultSet rs2 = stmt.executeQuery(
"select * from tester where num =" + i ) ;
I L’objet r´esultat de type ResultSet peut ˆetre parcouru ligne par
ligne.
Application BdD et JDBC
Ex´ecution d’une requˆete
11 / 28
R´ecup´eration des donn´ees
La classe ResultSet dispose des m´ethodes suivantes :
I boolean next() retourne true s’il reste un n-uplet `a lire. Le
premier appel `a next() permet de lire la premi`ere ligne.
I Type getType(int i) retourne l’objet de type Type de la colonne
en position i
I Type getType(String s) retourne l’objet de type Type de la
colonne de nom s
int i = 0;
while (rs.next()) {
int num = rs.getInt("num");
String ch = rs.getString("ch");
System.out.println("ligne " + i + ": "
+ num + ", " + ch);
i++;
}
Application BdD et JDBC
Ex´ecution d’une requˆete
12 / 28
Fermeture des ressources
On peut
I fermer un ResultSet : lib`ere les ressources utilis´ees par ce ResultSet.
I fermer un Statement : lib`ere les ressources utilis´es par le Statement,
et invalide le ResultSet issu de ce Statement (il faut attendre le
passage du garbage collector pour r´ecup´erer les ressources utilis´ees
par le ResultSet)
I fermer la connexion : la fermeture de la connexion entraˆıne la
fermeture des Statements associ´es.
rs.close();
stmt.close() ;
connect.close() ;
4. Application BdD et JDBC
Ex´ecution d’une requˆete
Batch
13 / 28
Batch
I Depuis JDBC 3.0, on peut envoyer une liste d’instructions `a
ex´ecuter.
I Cette fonctionnalit´e n’est pas requise, il peut donc y avoir des
pilotes qui ne l’impl´ementent pas.
I Ce sont forc´ement des instructions qui ne renvoient pas un
ResultSet : instructions DML update, delete, insert, ou instruction
DDL.
I Un Statement dispose de m´ethodes pour g´erer cette liste de
commandes :
I void addBatch(String sql) Ajoute dans la liste la requˆete pass´ee
en param`etre.
I void clearBatch() Vide la liste des instructions.
I int[] executeBatch() Ex´ecute les instructions de la liste. Le
tableau d’entiers renvoy´e contient les r´esultats d’ex´ecutions des
commandes.
Application BdD et JDBC
Ex´ecution d’une requˆete
Batch
14 / 28
tableau r´esultat
I Le tableau renvoy´e par executeBatch contient en ieme
position :
1. Un nombre 0 : nombre de lignes a↵ect´ees par l’ex´ecution de la ieme
instruction, qui s’est correctement ex´ecut´ee.
2. SUCCESS_NO_INFO : l’instruction s’est bien ex´ecut´ee mais on n’a pas
d’information sur le nombre de lignes a↵ect´ees.
3. EXECUTE_FAILED : l’instruction ne s’est pas bien ex´ecut´ee. Le
tableau est r´ecup´er´e via l’exception.
I Si ´echec d’une instruction : BatchUpdateException
I le pilote peut continuer ou arrˆeter de traiter les commandes restantes.
I on r´ecup`ere le tableau des r´esultats par la m´ethode
BatchUpdateException.getUpdateCounts.
I si le pilote continue : ce tableau contient autant d’´el´ements qu’il y a
de commandes dans la liste batch (et donc au moins un
EXECUTE_FAILED).
I Avec Oracle, le traitement s’arrˆete `a la premi`ere erreur, et le tableau
contient donc les compteurs pour toutes les instructions qui se sont
correctement ex´ecut´ees.
Application BdD et JDBC
Ex´ecution d’une requˆete
Batch
15 / 28
Batch : exemple
// s de type Statement, initialis´e par un createStatement
int[] results ;
// on commence par ajouter des instructions dans le batch
try {
s.addBatch("create table T(a number, b varchar(10))");
s.addBatch("insert into T values (1,’toto’)");
s.addBatch("delete from T where a=3");
} catch (SQLException e) { ... }
try {
results = s.executeBatch();
for (int i=0 ; i<results.length ; i++){
System.out.println(results[i]);
}// si tout se passe bien, affiche 0, 1, 0
} catch (BatchUpdateException e) { // une instruction pose pb
results = e.getUpdateCounts() ;
for (int i=0 ; i<results.length ; i++){
System.out.println(results[i]);
}// pour les instructions qui pr´ec`edent celle qui pose pb
} catch (SQLException ee){ ... }
Application BdD et JDBC
Ex´ecution d’une requˆete
Requˆetes pr´epar´ees
16 / 28
Pr´eparation des requˆetes
I Plus rapide lorsqu’une mˆeme requˆete est ex´ecut´ee plusieurs fois,
mˆeme avec des param`etres di↵´erents.
I Le SGBD a une version pr´ecompil´ee de la requˆete.
I JDBC permet de :
I Pr´eparer une requˆete (avec param`etres)
I Passer les param`etres e↵ectifs `a une requˆete param´etr´ee.
5. Application BdD et JDBC
Ex´ecution d’une requˆete
Requˆetes pr´epar´ees
17 / 28
L’interface PreparedStatement
I Cr´eation d’une requˆete pr´epar´ee :
PreparedStatement cmdSQL =
connect.prepareStatement("select *
from personne where nom=? and age > ?" );
I Param´etrer la requˆete :
cmdSQL.setString(1, "dupont") ;
cmdSQL.setInt(2,17) ;
I Ex´ecution de la requˆete :
ResultSet rs = cmdSQL.executeQuery() ;
Application BdD et JDBC
Ex´ecution d’une requˆete
Modules stock´es
18 / 28
Proc´edures stock´ees
I JDBC propose une interface CallableStatement qui permet
d’appeler des proc´edures ou fonctions stock´ees.
CallableStatement cs1
= connect.prepareCall( "{call ma_procedure (?,?)}" ) ;
CallableStatement cs2
= connect.prepareCall( "{? = call ma_function (?,?)}" ) ;
I Les param`etres en entr´ee sont g´er´es comme une requˆete pr´epar´ee
cs1.setString(1,"aa");
cs2.setInt(2,refCompte);
I Invocation de la proc´edure ou fonction :
cs1.executeUpdate();
cs2.registerOutParameter(1,java.sql.Types.DOUBLE);
cs2.execute();
double d = cs2.getDouble(1);
Application BdD et JDBC
Encore des ResultSet
19 / 28
Un peu plus sur les ResultSet
I Par d´efaut, un ResultSet poss`ede un sens unique de parcours
(TYPE_FORWARD_ONLY)
On peut changer ce sens de parcours
I Par d´efaut, un ResultSet est en lecture seule
On peut aussi cr´eer des ResultSet modifiables.
I On peut param´etrer son comportement par rapport aux autres
Application BdD et JDBC
Encore des ResultSet
20 / 28
Trois types de ResultSet
I TYPE_FORWARD_ONLY : Il n’y a que le sens de parcours en avant, de
la premi`ere ligne `a la derni`ere. Les lignes contenues dans le
ResultSet peuvent ˆetre, selon l’impl´ementation,
I Celles obtenues `a l’´ex´ecution de la commande SQL
I ou Celles obtenues au moment de la lecture par la m´ethode next
I TYPE_SCROLL_INSENSITIVE On peut aller en avant, en arri`ere, et
se rendre `a une position absolue. Le ResultSet n’est pas sensible aux
changements r´ealis´es de fa¸con concurrente sur les donn´ees
sous-jacentes au ResultSet.
I TYPE_SCROLL_SENSITIVE Deux sens de parcours et sensible aux
changements r´ealis´ees par ailleurs.
6. Application BdD et JDBC
Encore des ResultSet
21 / 28
Op´erations possibles
I CONCUR_READ_ONLY L’objet ResultSet ne peut pas ˆetre modifi´e.
I CONCUR_UPDATABLE L’objet ResultSet peut ˆetre utilis´e pour faire des
mises-`a-jour.
Statement stmt =
connect.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs
= stmt.executeQuery("SELECT a, b FROM TABLE2");
// rs will be scrollable,
// will not show changes made by others,
// and will be updatable
Application BdD et JDBC
Encore des ResultSet
22 / 28
D´eplacements (scrolling)
rs.next() ligne suivante
rs.previous() ligne pr´ec´edente
rs.absolute(i) aller `a la i`eme ligne
rs.absolute(-i) aller `a la i`eme ligne en partant de la derni`ere
rs.relative(i) descendre de i lignes
rs.relative(-i) remonter de i lignes
rs.afterLast() aller apr`es la derni`ere ligne
rs.isAfterLast() retourne vrai si apr`es derni`ere ligne
rs.last() aller `a la derni`ere ligne (comme absolute(-1))
rs.beforeFirst() aller avant la premi`ere ligne
rs.isBeforeFirst() retourne vrai si avant premi`ere ligne
rs.first() aller `a la premi`ere ligne (comme absolute(1))
Application BdD et JDBC
Encore des ResultSet
23 / 28
D´eplacements (suite)
I La fonction int getRow() permet de r´ecup´erer le num´ero de la
ligne courante.
I Les fonctions first, last, absolute, relative, next, previous
renvoient un bool´een qui indique si la nouvelle ligne courante est une
”vraie” ligne.
Application BdD et JDBC
Encore des ResultSet
24 / 28
Modification de lignes
I m´ethodes de ResultSet :
void updateType(String nomColonne, type
nouvelleValeur)
void updateRow()
void cancelRowUpdates()
I Un exemple :
srs.updateString("nom","Dupont") ;
srs.updateRow() ; // changement effectu´e en base
srs.updateString("nom","Caron") ;
srs.cancelRowUpdates() ;
//seul le 2nd updateString est invalid´e
7. Application BdD et JDBC
Encore des ResultSet
25 / 28
Insertion de lignes
Position particuli`ere dans le curseur pour une nouvelle ligne.
I m´ethodes de ResultSet :
void moveToInsertRow()
void moveToCurrentRow()
void insertRow()
I Un exemple :
// phase d’insertion
srs.moveToInsertRow();
srs.updateInt("num",5) ;
srs.updateString("nom", "Zidane");
srs.insertRow(); // insertion dans la base
srs.moveToCurrentRow() ;
// retour `a la position avant phase d’insertion
Application BdD et JDBC
Encore des ResultSet
26 / 28
Suppression et ”refresh”
I m´ethodes pour ResultSet :
void deleteRow()
Supprime la ligne courante.
void refreshRow()
en mode TYPE SCROLL SENSITIVE, permet de prendre en compte
les modifications faites par d’autres sur la ligne courante.
Application BdD et JDBC
M´etadonn´ees
27 / 28
Le niveau Meta
Une meta-donn´ee est une donn´ee qui d´ecrit une donn´ee
I Des Exemples :
I Mod`ele Relationnel : toutes les informations sur le sch´ema sont
stock´ees dans le dictionnaire.
I Java : getClass() , getMethods, getFields(), . . .
I JDBC propose une API pour analyser une base (introspection)
I ResultSetMetaData : Analyser dynamiquement la structure d’une
relation r´esultat
I DatabaseMetaData : API tr`es riche qui permet de connaˆıtre les
caract´eristiques de la base de donn´ees.
I Alternative : les vues du dictionnaire, mais m´ethode non portable
Application BdD et JDBC
M´etadonn´ees
28 / 28
ResultSetMetaData
I ResultSetMetaData rsmd = rs.getMetaData() ;
int getColumnCount() le nombre de colonnes
int getColumnDisplaySize(int column) taille d’a chage d’une col
String getColumnLabel(int column) nom sugg´er´e d’une colonne
String getColumnName(int column) nom de colonne
int getColumnType(int column) type (cste) de la colonne
String getColumnTypeName(int column) nom du type de la colonne