[JAVA]tite question bête!

tite question bête! [JAVA] - Java - Programmation

Marsh Posté le 05-03-2004 à 15:49:34    

comment je peux faire pour remplacer le caractère d'echappement ==> \
 
mon problème se présente à l'exécution d'une requete parametrée, moment ou il me pete une exception sur le caractère \!! comment faire? j'ai essayé de faire un replaceAll("\\","\\\\" ) il m'envoie ballader, c'est meme pire que ça il m'envoie ballader meme pour replaceAll("\\","tintin" ) il n'accepte pas le \ c chiant!!! quelqu'un peut gracieusement m'aider?
 
merci

Reply

Marsh Posté le 05-03-2004 à 15:49:34   

Reply

Marsh Posté le 05-03-2004 à 16:06:03    

ben moi j'voudrai bien mais je me rappel trés bien déjà avoir eu ce probleme et personne n'a su me fournir de réponse plausible ce qui fait que j'ai fais une ribanbelle de ligne de code pour traiter ma chaine de caractere !! Pourtant java gére tous les metacaracteres !!!

Reply

Marsh Posté le 05-03-2004 à 16:08:43    

je viens de testé en effet ca marche pas :/
je voit pas de solution simple, càd sans bidouiller la chaine dans tout les sens, mais il doit y avoir un solution ...

Reply

Marsh Posté le 05-03-2004 à 16:13:53    

j'espere! peut etre faut il passer par des unicode ou de l'ascii?
en ASP c'est bidon mais en JAVA c'est déja un peu plus chaud à gérer!

Reply

Marsh Posté le 05-03-2004 à 16:18:31    

dit laguiff, tu pourrai me filer un bout de ton code qui permet de recuperer les noms des tables de ta base car j'ai refait avec le DatabaseMetaData et je n'y suis pas arrivé. Ce serai vraiment sympa...
merci d'avance...

Reply

Marsh Posté le 05-03-2004 à 16:19:08    

ok je vois ça

Reply

Marsh Posté le 05-03-2004 à 16:23:03    

merci.
je te file mon mail --> brasseld@yahoo.fr

Reply

Marsh Posté le 05-03-2004 à 16:24:06    

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;
 }
}

Reply

Marsh Posté le 05-03-2004 à 16:43:26    

Merci ça marche, mon erreur venait du fait que quand j'appelai la methode getTable() je passais des parametres incorrect alors qu'il suffisait simplement de passé en paramétre uniquement des null !!!! en tout cas merci....

Reply

Marsh Posté le 05-03-2004 à 16:52:21    

EpoK a écrit :

je viens de testé en effet ca marche pas :/
je voit pas de solution simple, càd sans bidouiller la chaine dans tout les sens, mais il doit y avoir un solution ...


le premier argument du replaceAll n'est pas une simple chaine, c'est une regexp.
 
Donc si tu veux remplacer un \ :  
dans une regexp il faut l'encoder => \\
tu stockes ta regexp dans une chaine java => faut l'encoder "\\\\"
 
Essaye taChaine.replaceAll("\\\\", "\\" );


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 05-03-2004 à 16:52:21   

Reply

Marsh Posté le 13-05-2004 à 17:57:27    

Bon, moi aussi j'ai eu le problème, en fait je voulais sauvegarder des emplacements de fichiers dans une base de donnée, donc vu que mes \ étaient tronqués, j'ai essayé le replaceAll. C'est complétement mort ça marche pas, donc il suffit de faire une petite fonction qui le fait elle même, voici le code :
 
    public String replaceBS(String chaine)  
    {
         
        String formation = "";
        for (int i=0;i<chaine.length();i++)
        {
            if ((chaine.charAt(i))=='\\')
            {
             formation = formation + "\\" + "\\";
            }
            else if ((chaine.charAt(i))=='\'')
            {
             formation = formation + "\'" + "\'";
            }
            else
            {
                formation=formation+chaine.charAt(i);
            }
        }
        return formation;
    }
 
Voila, j'espère que ça pourra aider quelqu'un.
Bye
Den
------Java c'est pas d'la menthe à l'eau ... c'est du Rock'n'roll------

Reply

Marsh Posté le 13-05-2004 à 18:49:49    

mais comment c'est n'importe quoi ce topic...

Reply

Marsh Posté le 13-05-2004 à 19:01:32    

clair [:kadreg]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed