Download - JDBC Java Data Base Connectivity
![Page 1: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/1.jpg)
JDBCJava Data Base Connectivity
![Page 2: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/2.jpg)
Java DataBase Connectivity (JDBC)Cette API est développée par Sun en
collaboration avec les grands éditeurs de SGBD.
Les tâches assurées par JDBC sont:Gestion des connexions et transactionsPréparation de requêtes SQLAccès aisé aux résultats
JDBC est une architecture “bas niveau”, qui est utilisée dans les applications J2EE pour assurer les fonctions de persistance des données.
2
![Page 3: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/3.jpg)
Architecture dans Java EE
![Page 4: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/4.jpg)
Les pilotes JDBCIl existe 4 types de pilote:
![Page 5: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/5.jpg)
Etapes d’utilisation de JDBCCréation d’une instance de pilote JDBCDéfinition de l’URL de connexionCréation d’une connexion vers un SGBDR avec
l’instance du piloteCréation d’une ou +eurs instructionsExécution de la requête.Récupération et traitement des lignes du jeu de
résultatFermeture du jeu de résultatFermeture et Déconnexion de la BD
![Page 6: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/6.jpg)
Création d’une instance de pilote JDBC
import java.sql.*; public class ExempleJDBC{public static void main(String[] Args) { try {
Class.forName("com.mysql.jdbc.Driver"); } catch (Exception E) { System.err.println("Pas de pilote !"); } ... connexion et utilisation de la base ... }}
•L'appel à forName déclenche un chargement dynamique du pilote. •Un programme peut utiliser plusieurs pilotes, un pour chaque base de données. •Le pilote doit être accessible à partir de la variable d'environnement CLASSPATH.
![Page 7: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/7.jpg)
Connexion à la BDtry { String url = "jdbc:mysql://localhost/dbessai"; Connection conn =
DriverManager.getConnection(url, "user", “pw"); ... utilisation de la base ... }catch (SQLException E)
{ System.err.println(E.getMessage()); }
![Page 8: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/8.jpg)
Connexion BD MySql
Les paramètres à connaitre pour formater URL de connexion JDBC / MySQL:
Le nom de la machine ou s'exécute le SGBD MySQL : localhost (en local) ;
le numéro de port sur lequel le SGBD est à l'écoute : 3306
le nom de la base de données à accéder : BdTest le login : root le mot de passe : [aucun]
Ainsi :String url = "jdbc:mysql://localhost:3306/BdTest";Connection con =
DriverManager.getConnectio(url,"root","");
![Page 9: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/9.jpg)
Exécution Instruction SQLUn objet Statement est ce que votre
instruction SQL envoie vers le SGBD. Vous créerez simplement un objet Statement
, Puis l'exécuterez, lui fournissant la méthode
d'exécution appropriée avec l'instruction SQL que vous voulez envoyer. Pour une instruction SELECT, la méthode à
utiliser est executeQuery. Pour les instructions visant à créer ou modifier
des tables, la méthode est executeUpdate.
![Page 10: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/10.jpg)
Les requêtes en JDBC
Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "SELECT
Nom,Prenom,Age FROM personne " + "ORDER BY age" );
while (rs.next()) { System.out.println("Nom : " + rs.getString(1));
System.out.println("Prénom : " + rs.getString(2)); System.out.println("Age : " + rs.getString(3));
} rs.close(); // Fermeturest.close();conn.close();
![Page 11: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/11.jpg)
Récupération/ Lecture Résultat JDBC renvoie les résultats dans un objet ResultSet,
donc, nous avons besoin de déclarer une instance de la class ResultSet pour contenir nos résultats. Le code qui suit déclare l'objet ResultSet rs et lui assigne le résultat de notre requête :
ResultSet rs = stmt.executeQuery("SELECT * FROM TABLE1");
La variable rs, qui est une instance de ResultSet, contient les lignes
Pour pouvoir accéder aux champs, nous irons dans chaque ligne et récupèrerons les valeurs selon leur type
La méthode next déplace le curseur à la ligne suivanteLa méthode getType (du type approprié) pour accéder à
une valeur dans chaque colonne. Par exemple, si la colonne contient une valeur de type
VARCHAR. La méthode est getString. Pour une colonne type SQL FLOAT la méthode pour accéder à ces valeurs est getFloat.
![Page 12: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/12.jpg)
Récupération Résultat La classe java.sql.ResultSetAccès aux valeurs :Type getType( int );Type getType( String );boolean next();
Le Type peut être:
![Page 13: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/13.jpg)
Correspondance des types Java / SQL
SQL JavaCHAR String
VARCHAR StringLONGVARCHAR String
NUMERICjava.math.BigDeci
mal
DECIMALjava.math.BigDeci
malBIT boolean
TINYINT byteSMALLINT shortINTEGER intBIGINT longREAL float
FLOAT doubleDOUBLE doubleBINARY byte[]
VARBINARY byte[]LONGVARBINARY byte[]
![Page 14: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/14.jpg)
Déplacement dans un « Result Set »rs.first(); rs.beforeFirst(); rs.next(); rs.previous(); rs.afterLast(); rs.absolute( n ); rs.relative( n );
![Page 15: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/15.jpg)
Insertion de lignes
Statement st = conn.createStatement();
int nb = st.executeUpdate( "INSERT INTO personne(Nom,Age) " + "VALUES ('" + nom + "', " + age + ")" );
System.out.println(nb + " ligne(s) insérée(s)");st.close();Ce principe est aussi utilisable pour les
instructions UPDATE et DELETE.
![Page 16: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/16.jpg)
Erreurs et warnings
La classe java.sql.SQLException enrichit la classe java.lang.Exception:SQLState : description de l'erreur getNextException()
La classe java.sql.SQLWarning enrichit la classe java.sql.SQLException:getWarnings() : Warning suivant (il réalise des appels
répétés).
![Page 17: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/17.jpg)
Gestion des transactions
Le mode par défaut est « Auto Commit »:connexion.setAutoCommit(false); connexion.commit(); connexion.rollback();
![Page 18: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/18.jpg)
Modification d'un « Result Set »Modification
rs.updateString("Nom", “Ben Salah");rs.updateInt("Age", 24);rs.updateRow();
Destruction:rs.deleteRow();
![Page 19: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/19.jpg)
Insertion de lignes:rs.moveToInsertRow();rs.updateString("Nom", “Ben Salah");rs.updateInt("Age", 24);rs.insertRow();rs.first();
![Page 20: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/20.jpg)
Regroupement de plusieurs mise à jour:
connexion.setAutoCommit(false);Statement st =
connexion.createStatement(); st.addBatch("INSERT ...");st.addBatch("INSERT ..."); int[] nb = st.executeBatch();
On peut combiner des « Prepared Statement » et des « Batch updates ».
![Page 21: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/21.jpg)
Les DataSourceL'interface javax.sql.DataSource permet:
d'obtenir une connexion JDBC, de gérer un pool de connexion, de faire disparaître les constantes (placées
dans un annuaire JNDI ou un fichier de configuration).
![Page 22: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/22.jpg)
Les RowSetL'accès aux données est encapsulé dans un seul Bean:javax.sql.rowset.CachedRowSet rs = new
com.sun.rowset.CachedRowSetImpl();
rs.setUrl("jdbc:mysql://localhost/dbessai");rs.setCommand("SELECT * FROM personne");rs.setUsername(“fgfgf");rs.setPassword("...");rs.setConcurrency(ResultSet.CONCUR_UPDATABLE);rs.execute(); while (rs.next()) System.out.println("Nom : " +
rs.getString("nom")); rs.close();
![Page 23: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/23.jpg)
Il existe trois types de RowSet:JDBCRowSet (basé sur JDBC), CachedRowSet (déconnecté de la base), WebRowSet (échange basé sur des flux XML),
![Page 24: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/24.jpg)
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Exemple1 .. JSP et JDBC </title> </head>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page language="java" import = "java.sql.*" %>
<body> <table border = "1" width = "400« > <tr> <td> ID EMP</td><td> Nom Employé</td></tr>
<%
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/bdemp";
Connection conn = DriverManager.getConnection(url, "root", "");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from employes");
while(rs.next()){
String eid = rs.getString("idemp");
String nom = rs.getString("nom");
%>
<tr> <td> <%= eid %> </td> <td><%= nom %></td></tr>
<% }
stmt.close();
conn.close(); %>
</table> </body>
</html>
![Page 25: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/25.jpg)
Il est possible d’utiliser la technologie JavaBeans entre une page JSP et un beans pour obtenir une meilleure séparation entre Modèle, Vue et Contrôleur (Model View Controller – MVC).
![Page 26: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/26.jpg)
<%@page contentType="text/html" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"> <%@ page language="java" import ="<default package>.* ,java.sql.*"
%> <jsp:useBean id="empbean" class ="empQBean"
scope="page" /> <html> <head> <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8"> <title>Exempe 2 JSP JDBC Avec JavaBean</title> </head> <body> <table border = "3" width = "100%"> <tr> <td> ID EMP</td><td> Nom Employé</td></tr> <% empbean.makeConnection(); if (empbean.getEmployes()){ while (empbean.getNextEmploye()) { String eid = empbean.getColumn("idemp"); String nome = empbean.getColumn("nom"); %> <tr><td> <%= eid %> </td> <td><%= nome
%></td></tr><% } } empbean.takeDown(); %> </table> </body></html>
![Page 27: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/27.jpg)
import java.sql.*;
import java.io.*;
public abstract class sqlBean {
private String myDriver = "com.mysql.jdbc.Driver";
private String myURL = "jdbc:mysql://localhost:3306/bdemp";
protected Connection myconn;
public sqlBean() { }
public void makeConnection() throws Exception {
Class.forName(myDriver);
myconn = DriverManager.getConnection(myURL);
}
public abstract void cleanup() throws Exception;
public void takeDown() throws Exception {
cleanup();
myconn.close(); }
}
![Page 28: JDBC Java Data Base Connectivity](https://reader036.vdocuments.net/reader036/viewer/2022062315/56814db3550346895dbb0989/html5/thumbnails/28.jpg)
import java.sql.*;
public class empQBean extends sqlBean {
String myEmpSql = "select * from employes";
ResultSet rs = null;
Statement stmt = null;
public empQBean() { super(); }
public boolean getNextEmploye() throws Exception {
return rs.next();
}
public String getColumn(String inCol) throws Exception {
return rs.getString(inCol); }
public boolean getEmployes() throws Exception {
String myQuery = myEmpSql;
stmt = myconn.createStatement();
rs = stmt.executeQuery(myQuery);
return (rs != null);
}
public void cleanup() throws Exception {
stmt.close(); }
}