Академический Документы
Профессиональный Документы
Культура Документы
Introduction
Il existe plusieurs modèles de base de données :
étaient largement utilisées sur les gros systèmes de type mainframe. Les
relationnel. Les données sont organisées en tables possédant des relations entre
elles grâce à des clés primaires et étrangères. Les opérations sur la base sont
Derby
- JDBC (Java DataBase Connectivity) désigne une API définie par Sun pour
- un pilote : Pour pouvoir utiliser JDBC, il faut un pilote qui est spécifique à la
Classe Rôle
données
PreparedStatement ) données
données
Les accès à une base de données doivent être effectués à travers des étapes
consécutives :
3. Établissement de la connexion
5. Exécution de la requête
java.lang.ClassNotFoundException
Exemples :
Pour charger le pilote à utiliser pour une base de données de type ODBC (par
exemple Access) :
Pour obtenir plus d’informations sur les pilotes JDBC, il faut se référer à l’adresse
suivante :
//http://java.sun.com/jdbc/drivers.html
Les drivers se présentent souvent sous forme de fichiers .jar dont le chemin doit être
«jdbc:».
- Le format exact de cette URL est dépendant du pilote JDBC utilisé et peut
varier d'un type de base de données à l'autre mais elle est toujours de la
forme «protocole:sous_protocole:nom»
Etablissement de la connexion
paquetage java.sql
Exemple :
import java.sql.* ;
……
try
{
Connection con =
DriverManager.getConnection(url,userId,password)
}
catch(SQLException sqle)
{
System.err.println("Erreur lors de la connexion : "
+ sqle) ;
}
Une fois la connexion établie, on peut obtenir des métadonnées sur la base en
Exemple :
import java.sql.* ;
……
try
{
Connection con = DriverManager.getConnection(url,userId,password) ;
DatabaseMetaData metaData = con.getMetaData();
System.out.println(metaData.getDatabaseProductName());
System.out.println(metaData.getDatabaseProductVersion());
}
catch(SQLException sqle)
{
System.err.println(" Erreur lors de la connexion : " + sqle) ;
}
Oracle,…)
- DatabaseMataData getDatabaseProductVersion()
- DatabaseMataData getDriverName()
la classe Connection :
Statement st = con.createStatement() ;
base de données.
Exemple :
String query = "SELECT * FROM Employes";
ResultSet rs = st.executeQuery(query);
Si l'on utilise executeQuery() pour exécuter une requête SQL ne contenant pas
d'ordre SELECT, alors une exception de type SQLException est levée.
Remarque :
Pour une requête de type commande (INSERT, DELETE ou UPDATE), il sera
Exemple :
String query = "DELETE FROM Employes WHERE Region = ‘WA’";
int result = st.executeUpdate(query) ;
Traitement du résultat
sinon ; toutes peuvent lever une exception de type SQLException en cas d’erreur
d’accès à la base.
comme suit :
Méthode Retourne
isBeforeFirst() true si l’enregistrement courant est situé
avant le premier du ResultSet, false
sinon
isFirst() true si l’enregistrement courant est le
premier du ResultSet, false sinon
isLast() true si l’enregistrement courant est le
dernier du ResultSet, false sinon
isAfterLast() true si l’enregistrement courant est situé
après le dernier du ResultSet, false sinon
getRow() Le numéro de l’enregistrement courant
du ResultSet
des formats différents. La meilleure manière d’extraire les données d’une colonne est
Méthode Rôle
getInt() retourne sous forme d'entier le contenu de la colonne dont le numéro est
passé en paramètre
getLong() retourne sous forme d'entier long le contenu de la colonne dont le
numéro est passé en paramètre
getByte() retourne sous forme de byte le contenu de la colonne dont le numéro est
passé en paramètre
getFloat() retourne sous forme de nombre flottant le contenu de la colonne dont le
numéro est passé en paramètre
getDate() retourne sous forme de date le contenu de la colonne dont le numéro est
passé en paramètre
La méthode getString() permet d'obtenir la valeur d'un champ de n'importe quel type.
Connection.
Exemple : con.close() ;
Exemple 1 :
Cet exemple affiche le contenu d’une base Access de nom « commande »
import java.sql.*;
//import java.io.*;
// affiche le contenu d'une base commande
public class Sql0
{
static final String DB="commande"; // base de données à exploiter
public static void main(String arg[])
{
Connection con=null; // connexion avec la base
Statement st=null; // objet d'émission des requêtes
ResultSet rs=null; // table résultat d'une requête
try
{
// connexion à la base
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:"+DB,"","");
System.out.println("Connexion avec la base " + DB + " établie");
// création d'un objet Statement
st=con.createStatement();
// exécution d'une requête select
rs=st.executeQuery("select * from Customers" );
// exploitation de la table des résultats
while(rs.next())
{ // tant qu'il y a une ligne à exploiter
// on l'affiche à l'écran
System.out.println(rs.getString(1)+","+
rs.getString(2)+","+
rs.getString(3)+","+
rs.getString(4)+",");
}// ligne suivante
} catch (Exception e)
{
System.err.println("Erreur " + e);
}
// fermeture de la base
try
{
con.close();
System.out.println("Base " + DB + " fermée");
} catch (Exception e){}
}// main
}// classe
Exemple 2 :
Ce programme exécute sur la base « commande » toute requête SQL Select que l’utilisateur tape au
clavier.
import java.sql.*;
import java.io.*;
// affiche le contenu d'une base système commande
public class Sql1
System.out.println(RS.getString(nbColonnes));
}// ligne suivante
// requête suivante
System.out.print("Requête : ");
select=in.readLine();
}// while
}
catch (Exception e)
{
erreur("Erreur " + e,2);
}
// fermeture de la base et du flux d'entrée
try
{
connect.close();
System.out.println("Base " + DB + " fermée");
Exemple 3 :
Le programme précédent modifié légèrement : les requêtes tapées au clavier sont maintenant des
requêtes de mise à jour de la base « commande ».
import java.sql.*;
import java.io.*;
// affiche le contenu d'une base système commande
public class sql2
{
static final String DB="commande"; // base de données à exploiter
public static void main(String arg[])
{
Connection connect=null; // connexion avec la base
Statement S=null; // objet d'émission des requêtes
ResultSet RS=null; // table résultat d'une requête
String sqlUpdate; // texte de la requête SQL de mise à jour
int nbLignes; // nb de lignes affectées par une mise à jour
// création d'un flux d'entrée clavier
BufferedReader in=null;
try
{
in=new BufferedReader(new InputStreamReader(System.in));
}
catch(Exception e)
{
erreur("erreur lors de l'ouverture du flux clavier ("+e+")",3);
}
try
{
// connexion à la base
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connect=DriverManager.getConnection("jdbc:odbc:"+DB,"","");
System.out.println("Connexion avec la base " + DB + " établie");
// création d'un objet Statement
S=connect.createStatement();
// boucle d'exécution des requêtes SQL tapées au clavier
System.out.print("Entrez votre requête : ");
sqlUpdate=in.readLine();
while(!sqlUpdate.equals("fin"))
{
// exécution de la requête
nbLignes=S.executeUpdate(sqlUpdate);
// suivi
System.out.println(nbLignes + " ligne(s) ont été mises à jour");
// requête suivante
System.out.print("Requête : ");
sqlUpdate=in.readLine();
}// while
EXERCICES DE PROGRAMMATION
1. Remplacer dans les exemples récapitulatifs ci-dessus la base Access par une base MySQL
ou ORACLE possédant plus d’une table et expérimenter la jointure.
2. Considérer les requêtes d’action (de commande)
3. Considérer le travail en mode graphique