Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1685 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA]tite question bête!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA]tite question bête!

n°664451
laguiff
Posté le 05-03-2004 à 15:49:34  profilanswer
 

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

mood
Publicité
Posté le 05-03-2004 à 15:49:34  profilanswer
 

n°664468
brasseldX
Posté le 05-03-2004 à 16:06:03  profilanswer
 

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 !!!

n°664472
EpoK
Let's burn
Posté le 05-03-2004 à 16:08:43  profilanswer
 

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 ...

n°664476
laguiff
Posté le 05-03-2004 à 16:13:53  profilanswer
 

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!

n°664482
brasseldX
Posté le 05-03-2004 à 16:18:31  profilanswer
 

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...

n°664484
laguiff
Posté le 05-03-2004 à 16:19:08  profilanswer
 

ok je vois ça

n°664490
brasseldX
Posté le 05-03-2004 à 16:23:03  profilanswer
 

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

n°664493
laguiff
Posté le 05-03-2004 à 16:24:06  profilanswer
 

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

n°664527
brasseldX
Posté le 05-03-2004 à 16:43:26  profilanswer
 

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....

n°664547
benou
Posté le 05-03-2004 à 16:52:21  profilanswer
 

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
mood
Publicité
Posté le 05-03-2004 à 16:52:21  profilanswer
 

n°724984
denielig
Posté le 13-05-2004 à 17:57:27  profilanswer
 

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

n°725050
lorill
Posté le 13-05-2004 à 18:49:49  profilanswer
 

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

n°725084
Taz
bisounours-codeur
Posté le 13-05-2004 à 19:01:32  profilanswer
 

clair [:kadreg]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA]tite question bête!

 

Sujets relatifs
Java et BDD accessbase Access et Java grrrrrrrrrrrr
IPC avec JAVAQuestion pour un (méga) champion [2]
Question pour un champion [1][JAVA] NullPointer Exception : JVM Symantec ???
Les .class: question?[WBEM] Comment peut on connaitre la config de son PC en java ??
2 petites question de rien du tout = pb email et HTML ... merci......java, dtd, xml et sax, help mega noob plz ...
Plus de sujets relatifs à : [JAVA]tite question bête!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR