Définition des données : MétaDonnée
Il est possible de retrouver la définition d'une table sans exécuter une requête SQL.
La classe Connection possède une méthode permettant d'obtenir une instance de
la classe DatabaseMetaData.
Cette classe permet de connaître :
- les colonnes d'une table
- les clés primaires d'une table
- Les clés étrangères d'une table
- Les index de la table
- les UDTs
- Les procédures stockées
- les droits sur les tables
- les tables
_ ....
Méthode de la classe :
- ResultSet getColumns(String catalog, String schemaPattern,
String tableNamePattern, String columnNamePattern)
Méthode qui retourne un ResultSet contenant la liste des colonnes
de la table et les informations liés aux colonnes (type, longueur, ...)
- String Catalog : représente le nom de la machine, peut être null
- String schemaPattern : Représente le nom de la bibliothèque, peut être null
- String tableNamePattern : nom de la table complet ou partiel, peut être null
- String columnPattern : nom de la colonne complet ou partiel
- ResultSet getPrimaryKeys(String catalog, String schema,
String table)
Méthode qui retourne un Resultset contenant la liste des colonnes qui
définissent la clé primaire de la table
- String Catalog : représente le nom de la machine, peut être null
- String schema : Représente le nom de la bibliothèque, peut être null
- String table : nom de la table
- ResultSet getExportedKeys(String catalog, String schema,
String table) throws SQLException;
Méthode qui retourne un Resultset contenant la liste des colonnes qui
définissent les clés étrangères de la table
- String Catalog : représente le nom de la machine, peut être null
- String schema : Représente le nom de la bibliothèque, peut être null
- String table : nom de la table
- ResultSet getIndexInfo(String catalog, String schema, String table,
boolean unique, boolean approximate)
Méthode qui retourne un Resultset contenant la liste des colonnes présentes
dans les index de la table.
- String Catalog : représente le nom de la machine, peut être null
- String schema : Représente le nom de la bibliothèque, peut être null
- String table : nom de la table
- boolean unique : indique que l'on ne souhaite voir que les index uniques
- boolean approximate : nom de la table
- ResultSet getTablePrivileges(String catalog, String schemaPattern,
String tableNamePattern)
Méthode retournant un ResultSet contenant les droits des tables
- String Catalog : représente le nom de la machine, peut être null
- String schemaPattern : Représente le nom de la bibliothèque, peut être null
- String tableNamePattern : nom de la table complet ou partiel
Utilisation de la classe :
java.sql.Connection dbCon;
//Obtention de la méta-donnée
java.sql.DatabaseMetadata dbm = dbCon.getMetaData();
//Liste des colonnes de la table vins
ResultSet rs = dbCon.getColumns(null,null,"Vins",null);
Exercice :
package formation.exercice;
import java.sql.*;
public class JDBCProcedureDemo {
public static void main(String[] args) {
try{
if(args.length>0){
String nomTable = args[0];
//Déclaration du driver :
//Url de connexion
//Connexion à la BDD
//Obtention de la classe DatabaseMetadata:
//Obtention des colonnes de la table
//Obtention du nombre de colonnes du ResultSet
//Boucler sur les enregistrements
while(rs.next(){
//Création d'un objet StringBuffer pour alimenter l'affichage
Stringbuffer strb = new StringBuffer();
//Boucler sur les colonnes du ResultSet pour afficher toutes
//les propriétés des colonnes de la table
for(){
//Obtention du nom de la propriété à afficher
String nom =
//Obtention de la valeur de la colonne
String val =
strb.append(" | ");
strb.append(nom);
strb.append(" : ");
strb.append(val);
}
//Affichage du nom et de la valeur
System.out.println(strb.toString());
}
//Fermeture des objets SQL
}else{
System.out.println("Paramètres insuffisants");
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
|
Corrigé
package formation.exercice;
import java.sql.*;
public class JDBCProcedureDemo {
public static void main(String[] args) {
try{
//Déclaration du driver :
Class.forName("com.ibm.as400.access.AS400JDBCDriver");
//Url de connexion
String dbUrl = "jdbc:as400://AS400/BDVIN1"
//Connexion à la BDD
Connection dbCon = DriverManager.getConnection(dbUrl,user,password);
//Obtention de la classe DatabaseMetadata:
DatabaseMetaData dbm = dbCon.getMetaData();
//Obtention des colonnes de la table
ResultSet rs = dbm.getColumns(null,null,nomTable,null);
//Obtention du nombre de colonnes de du ResultSet
int nbCol = rs.getMetaData().getColumnsCount();
//Boucler sur les enregistrements
while(rs.next(){
//Création d'un objet StringBuffer pour alimenter l'affichage
Stringbuffer strb = new StringBuffer();
for(int i =1;i<=nbCol;i++){
//Obtention du nom de la propriété à afficher
String nom = rs.getMetaData().getColumnName(i);
//Obtention de la valeur de la colonne
String val = rs.getString(i);
strb.append(" | ");
strb.append(nom);
strb.append(" : ");
strb.append(val);
}
//Affichage du nom et de la valeur
System.out.println(strb.toString());
}
//Fermeture des objets SQL
rs.close();
dbCon.close();
}else{
System.out.println("Paramètres insuffisants");
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
|
|