tiens voila carrement ma classe, elle ne fait pas tout juste ce dont j'ai besoin mais tu trouveras, je pense, de quoi avancer.
import java.sql.*;
import java.awt.List;
import java.util.Vector;
/**
* classe pour récupération des Metadatas d'une base de données
*
*
*/
public class MetaDataBDD {
private Connection a_connection;
private List a_tables = new List() ;
/**
* constructeur de la classe
* @param p_connection
*/
public MetaDataBDD(Connection p_connection) {
a_connection = p_connection;
}
/**
* retourne la connection
*/
public Connection getConnection(){
return this.a_connection;
}
/**
* affiche les meta données de la base de donnée,
* affiche le nom des tables et leurs champs
*
*/
public void getDescriptionBase(){
int w_i;
try{
int w_max = a_tables.getItemCount()-1;
for(w_i=0;w_i<=w_max;w_i++){
String w_tableEnCours = a_tables.getItem(w_i);
//System.out.println(w_tableEnCours);
Vector w_temp = this.getChamps(w_tableEnCours);
int w_j;
for (w_j = 1;w_j <= w_temp.size()-1;w_j++){
String w_nom = ((ResultSetMetaData)w_temp.get(w_j)).getColumnName(w_j);
String w_typeDb =((ResultSetMetaData)w_temp.get(w_j)).getColumnTypeName(w_j);
String w_typeJava = ((ResultSetMetaData)w_temp.get(w_j)).getColumnClassName(w_j);
int w_tailleChamp = ((ResultSetMetaData)w_temp.get(w_j)).getColumnDisplaySize(w_j);
System.out.println("champ" + w_j + " ==>" + w_nom + " -- type (dataBase)==>" + w_typeDb
+ " -- (JAVA)==>" + w_typeJava + " -- taille ==>" + w_tailleChamp);
}
}
}catch(Exception exc){
System.out.println("Erreur==>" + exc.getMessage());
}
}
/**
*
*mets à jour l'attribut a_tables qui contient les noms des tables de la base.
*
*/
private void setTablesName(){
try{
/*
* je récupère les META DONNEES grâce à la méthode getMetaData() de l'objet Connection
* à partir de l'objet DatabaseMetaData en retour je récupère la liste des tables
* grâce à la méthode getTables(catalog,SchemaPattern,tableNameattern,types).
* ==> pour avoir toutes les informations je passe tous les paramètres à null
*/
ResultSet monRs = a_connection.getMetaData().getTables(null,null,null,null);
String w_type;
String w_name;
while(monRs.next()){
/*
*on ne peut accèder aux champs d'un recordset qu'une seul fois
*==> je stoque donc la valeur du champ dans une variable pour réutilisation
*==> les différentes tables retournées par le ResultSet obtenu de getTables()
* sont dans le JAVAdoc de la méthode
*/
w_name = monRs.getString("TABLE_NAME" );
w_type = monRs.getString("TABLE_TYPE" );
// je test le type de table.
/* vu que le "type" String est un objet en JAVA,
* pour comparer deux String j'utilise equalsIgnoreCase()
* et non le symbole "="
*/
if(w_type.equalsIgnoreCase("TABLE" )){
// je stock le nom de la table
a_tables.add(w_name);
}
}
monRs.close();
}catch(SQLException exc){
System.out.println("Erreur" );
System.out.println(exc.getCause());
System.out.println(exc.getMessage());
}
}
/**
* permet de récupérer la liste des infos sur les tables de la base
* @return la liste des tables de la base
*/
public List getTables(){
return a_tables;
}
/**
*retourne un vecteur contenant des Objets ResultSetMetaData avec les infos de chaque champ de la table
*
*@param p_table nom de la table à traiter
*@return retourne un vector avec les infos sur les champs de la table
*/
public Vector getChamps(String p_table){
Vector w_lesChamps = new Vector();
try{
Statement champs = a_connection.createStatement();
// je sélectionne tous les champs de la table
ResultSet monRsChamp = champs.executeQuery("select * from " + p_table + ";" );
int nbColonne = monRsChamp.getMetaData().getColumnCount();
System.out.println("nbColonne==>" + nbColonne);
int w_i;
for (w_i = 0;w_i <= nbColonne;w_i++){
// pour chaque champ je rajoute l'objet ResultSetMetaData au vecteur w_lesChamps
w_lesChamps.add(monRsChamp.getMetaData());
}
}catch(SQLException exc){
exc.printStackTrace();
}
return w_lesChamps;
}
}