[java]probleme avec les vecteurs

probleme avec les vecteurs [java] - Programmation

Marsh Posté le 20-12-2001 à 10:48:55    

bonjour tt le monde,
apres de nombreuses heures sur ce probleme qui est surement tout con jbalance une classe que j ai ecrite pas forcement tres propre qui permet entre autre de recupérer un tableau a 2 dimension a partir d une requete sql
 
 import java.sql.*;
 import java.io.*;
import java.util.*;
 public class DBUtilities {
 
 
private    int j;
private    int nbColumn=0;
private    Statement statement=null;
private    String AccessDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
private    String MySqlDriver = "org.gjt.mm.mysql.Driver";
private    Connection connection=null;  
private    Vector vecteur=null;
 
  public DBUtilities()
  {
   
  }
 
  public  Statement connect(String driver,String url) throws ClassNotFoundException,SQLException
  {
      Class.forName(driver);
      connection = DriverManager.getConnection(url);
      statement = connection.createStatement();  
 return statement;      
 }  
     
 
  public  String[][] getResult(Statement statement ,String query) throws SQLException
  {  
   vecteur = new Vector(2,3);
    String[] tabResult=null;
    ResultSet resultSet = statement.executeQuery(query);
       ResultSetMetaData resultsMetaData = resultSet.getMetaData();
       nbColumn = resultsMetaData.getColumnCount();
       
            tabResult= new String[nbColumn];
           
           for(j=0; j<nbColumn;j++)
            {
            tabResult[j]=resultsMetaData.getColumnName(j+1);
            }
    vecteur.addElement(tabResult);
                     while(resultSet.next())  
                     {
                            for(j=0; j<nbColumn;j++)
                              {tabResult[j]=resultSet.getString(j+1);  
                              }
     vecteur.addElement(tabResult);
     /*
     *le vecteur ne contien que le dernier element...
     *
     *
     */
                     }      
                   
 return cast(vecteur,nbColumn);
   }  
   
 public String [][] cast(Vector v,int nbColumn)
 {
  String[][] result=new String[v.capacity()][nbColumn];
  String[] ligne=null;
  int i=0;
     for (Enumeration e = v.elements() ; e.hasMoreElements() ; )  
     {
      ligne= (String[])e.nextElement();
         for(j=0; j<ligne.length;j++)
           {result[i][j]=ligne[j];
           }  
      }
 return result;  
  }
   
 public int getColomnCount()
 {  
 return  nbColumn;
 }
       
 public void stop() throws SQLException
 {
    connection.close();
 }
 
 
 public void update(Statement statement ,String query) {
    try  
    {int bc =  statement.executeUpdate(query);
     System.out.print("enregistrement mis a jour: " + bc +"\n" );
    }
     catch(SQLException sqle){
     System.out.print("erreur : " + sqle );
    }
 
  }
 
 
 
 }
 
en gros apres on fait:
 
DBUtilities dbu = new DBUtilities();  
try{
Statement stm = dbu.connect("org.gjt.mm.mysql.Driver","jdbc:mysql://localhost/java" );
result= dbu.getResult(stm,"select * from selection" );//ou result est un tableau a 2 dim...
}catch(Exception e){System.out.print("prob" + e);}
merci de votre aide  
jerry

 

[edtdd]--Message édité par veryfree--[/edtdd]

Reply

Marsh Posté le 20-12-2001 à 10:48:55   

Reply

Marsh Posté le 20-12-2001 à 10:58:33    

je savais pâs que l'on pouvait faire des vecteur a deux dimenssions!!

Reply

Marsh Posté le 20-12-2001 à 11:11:03    

Drakkeng a écrit a écrit :

je savais pâs que l'on pouvait faire des vecteur a deux dimenssions!!  




il sagit d un vecteur d objet c pratique...qd ca marche  :(

Reply

Marsh Posté le 20-12-2001 à 11:57:19    

Pfff que c pas bo :D
 
Commence par faire vecteur = new Vector();


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 20-12-2001 à 11:59:58    

darklord22 a écrit a écrit :

Pfff que c pas bo :D
 
Commence par faire vecteur = new Vector();  




c juste ca qui cloche?
c juste ca qui est pas bo?
tu fait quoi comme etude toi ?
t a quel age au fait?
j ai appris le java toutr seul alors forcement c se recent ds la facon de programmer
jerry

 

[edtdd]--Message édité par veryfree--[/edtdd]

Reply

Marsh Posté le 20-12-2001 à 12:00:31    

Drakkeng a écrit a écrit :

je savais pâs que l'on pouvait faire des vecteur a deux dimenssions!!  




 
Ou tu vois qu'il fait un vecteur a deux dimension toi :D
 
Vector
public Vector(int initialCapacity,
              int capacityIncrement)Constructs an empty vector with the specified initial capacity and capacity increment.
Parameters:
initialCapacity - the initial capacity of the vector.
capacityIncrement - the amount by which the capacity is increased when the vector overflows


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 20-12-2001 à 15:32:30    

j essaye ce soir avec Vector vecteur = new Vector();
mais dit moi ce qui cloche ds mon code jve dire pour le rendre plus pro :D

Reply

Marsh Posté le 20-12-2001 à 15:42:57    

J'ai une question, pourquoi utiliser un vecteur alors que tu veux en fait un String[2][numcol] avec numcol que tu connais.
 
ce serait pas un peu plus simple ?
 
du genre:
 
String[][] result = new String[2][nbColumn];
for (int index = 0; index < nbColumn; index++) {
   result[0][index] = resultsMetaData.getColumnName(index+1);
   result[1][index] = resultSet.getString(index+1);
}
 
return result;
Renaud

 

[edtdd]--Message édité par - Renaud ---[/edtdd]

Reply

Marsh Posté le 20-12-2001 à 15:48:23    

salut,
vu qu il sagit du resultat d une requete sql tu peux connaitre le nombre de colones retournée mais pas le nombres d enregistrement d ou l interet d un vecteur...
jerry

Reply

Marsh Posté le 20-12-2001 à 15:48:44    

ben ce qui va pas dans ton code c'est que le "vecteur.addElement(tabResult);" tu l'as mit en dehors de ta boucle, donc forcément ca ajoute que la dernière ligne : tu mets le '}' une ligne plus bas et ca marchera 'hachement mieux ! ;)
 
ensuite, si tu veux faire un vecteur à 2 dimmensions, il faut que tu fasse un vecteur dans lequel tu met des vecteurs :
Vector result = new Vector();
Vector ligne_tmp;
while (rs.next()) {
   ligne_tmp = newVector();
   for(j=1; j<=nbColumn;j++)
      ligne_tmp.add(resultSet.getString(j))
   result.add(ligne_tmp);
}
 
remarque : si tu utilise le jdk1.3, utilise les ArrayList plutot que les Vector.
 
autre remarque : au moment du cast du vector en tableau, tu n'est pas obligé de faire une double boucle : tu peux mettre directement le tableau que contient le vecteur dans le tableau (pas besoin de copier chacun des éléments dans un nouveau tableau)

Reply

Marsh Posté le 20-12-2001 à 15:48:44   

Reply

Marsh Posté le 20-12-2001 à 15:53:23    

benou a écrit a écrit :

 
remarque : si tu utilise le jdk1.3, utilise les ArrayList plutot que les Vector.




Les ArrayList c'est meme dans le 1.2

Reply

Marsh Posté le 20-12-2001 à 15:54:39    

benou a écrit a écrit :

ben ce qui va pas dans ton code c'est que le "vecteur.addElement(tabResult);" tu l'as mit en dehors de ta boucle, donc forcément ca ajoute que la dernière ligne : tu mets le '}' une ligne plus bas et ca marchera 'hachement mieux ! ;)
 
ensuite, si tu veux faire un vecteur à 2 dimmensions, il faut que tu fasse un vecteur dans lequel tu met des vecteurs :
Vector result = new Vector();
Vector ligne_tmp;
while (rs.next()) {
   ligne_tmp = newVector();
   for(j=1; j<=nbColumn;j++)
      ligne_tmp.add(resultSet.getString(j))
   result.add(ligne_tmp);
}
 
remarque : si tu utilise le jdk1.3, utilise les ArrayList plutot que les Vector.
 
autre remarque : au moment du cast du vector en tableau, tu n'est pas obligé de faire une double boucle : tu peux mettre directement le tableau que contient le vecteur dans le tableau (pas besoin de copier chacun des éléments dans un nouveau tableau)  




 
heu  :sarcastic:  
 
                    while(resultSet.next())  
                    {
                           for(j=0; j<nbColumn;j++)
                             {tabResult[j]=resultSet.getString(j+1);  
                             }
    vecteur.addElement(tabResult);
                    }      
il est ds la boucle while si tu regarde bien...
 
"autre remarque : au moment du cast du vector en tableau, tu n'est pas obligé de faire une double boucle : tu peux mettre directement le tableau que contient le vecteur dans le tableau (pas besoin de copier chacun des éléments dans un nouveau tableau) "
tu fait comment? en gardant l exemple dui tableau ds le vecteur
merci de ton, aide

Reply

Marsh Posté le 20-12-2001 à 16:23:17    

veryfree a écrit a écrit :

 
c juste ca qui cloche?
c juste ca qui est pas bo?
tu fait quoi comme etude toi ?
t a quel age au fait?
j ai appris le java toutr seul alors forcement c se recent ds la facon de programmer
jerry



 
Ah bin non, je pense qu'il y a pas que ça. Y a surement un prob de boucle ou un truc du genre, c'est souvent ça le prob.
Je faisais des études :D
Maitrise en informatique en Belgique. Actuellement, je suis consultant E-business pour une boite française, Devoteam (je pense que c'est connu en France, un peu moins en Belgique).
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 20-12-2001 à 16:45:49    

veryfree a écrit a écrit :

 
 
heu  :sarcastic:  
il est ds la boucle while si tu regarde bien...
 
tu fait comment? en gardant l exemple du tableau ds le vecteur
merci de ton, aide  




 ha ouais tiens ... :sarcastic: :D
ben ca devrait marcher alors ...
 
pour le cast :  
(j'en profite pour corriger 2, 3 trucs ... ;)
 
   public static String [][] cast(Vector v) {  
       String[][] result=new String[v.size()][];
       Iterator it = v.iterator();
       int i=0;
       while (it.hasNext())
    result[i++]= (String[])it.next();  
       return result;  
   }

Reply

Marsh Posté le 20-12-2001 à 17:45:30    

darklord22 a écrit a écrit :

 
 
Ou tu vois qu'il fait un vecteur a deux dimension toi :D
 
Vector
public Vector(int initialCapacity,
              int capacityIncrement)Constructs an empty vector with the specified initial capacity and capacity increment.
Parameters:
initialCapacity - the initial capacity of the vector.
capacityIncrement - the amount by which the capacity is increased when the vector overflows  




 
a oui j'etais pas bien réveiller ce matin ,et comme j'ai jamais initialisé un vecteur car justement je m'en sert quand je connais pas la taille finale ,ben j'ai raconté des des conneries :crazy:

Reply

Marsh Posté le 20-12-2001 à 20:34:41    

benou a écrit a écrit :

 
 ha ouais tiens ... :sarcastic: :D
ben ca devrait marcher alors ...
 
pour le cast :  
(j'en profite pour corriger 2, 3 trucs ... ;)
 
   public static String [][] cast(Vector v) {  
       String[][] result=new String[v.size()][];
       Iterator it = v.iterator();
       int i=0;
       while (it.hasNext())
    result[i++]= (String[])it.next();  
       return result;  
   }  




ok ben j ai remplacé mon cast par le tien (enfin y a tj les deux lol :D )
j ai fait Vector vecteur = new Vector();
et rien a faire mon vecteur contien que le dernier enregistrement par pitié aider moi c pour un projet libre qui genere des formulaires php a partir d une table mysql d ailleur si y en a qui veulent se joindre pas de probleme
jerry

 

[edtdd]--Message édité par veryfree--[/edtdd]

Reply

Marsh Posté le 21-12-2001 à 09:32:05    

Fais du logging dans ton code pour voir ce qu'il se passe.  
Genre
 
1) Tu affiche a la console le nombre de résultats.  
2) Tu affiche un msg chaque fois que tu ajoutes qqch dans ton vecteur
 
Mais quoi qu'il en soit, c'est assez douteux ton code pour tout dire. Je le trouve même un peu crasse. Cette histoire de tableau a deux dimensions dans les vecteurs. C'est pas super propre
 
Peut etre qu'en expliquant la structure de ta DB et ce que tu récupères on peut te générer un code plus propre (avec un object représentant la table par exemple.
 
A+ :hello:


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 21-12-2001 à 11:05:58    

j ai deja fait tt ca en fait (logging)
le probleme vien la ou on rempli le vecteur la ou y a un comentaire dsd le code que jai fournis -qui peut etre compilé d ailleur tel quel- et vu que ce code servira pour toute les base je prefere le laisser "standard"...

Reply

Marsh Posté le 21-12-2001 à 11:09:03    

veryfree a écrit a écrit :

j ai deja fait tt ca en fait (logging)
le probleme vien la ou on rempli le vecteur la ou y a un comentaire dsd le code que jai fournis -qui peut etre compilé d ailleur tel quel- et vu que ce code servira pour toute les base je prefere le laisser "standard"...  




 
envoie la trace stp .. C'est un prob a la con, je le sens ...


---------------
What is popular is not always right, what is right is not always popular :D
Reply

Marsh Posté le 21-12-2001 à 13:28:22    

ouaip ca sent le problème à la con !!!

Reply

Marsh Posté le 21-12-2001 à 13:37:27    

benou a écrit a écrit :

ouaip ca sent le problème à la con !!!  




j essaye ce soir la jpe po...

Reply

Marsh Posté le 21-12-2001 à 19:29:09    

voila
il suffit de le recompilé tel quel et changer qq valeur de la partir main
mettre le driver ds le classpath et voir le resultat
 
/*****************/
import java.sql.*;
import java.io.*;
import java.util.*;
public class DBUtilities {
 
 
private    int j;
private    int nbColumn=0;
private    Statement statement=null;
private    String AccessDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
private    String MySqlDriver = "org.gjt.mm.mysql.Driver";
private    Connection connection=null;  
private    Vector vecteur=null;
 
 public DBUtilities()
 {
 
 }
 
 public  Statement connect(String driver,String url) throws ClassNotFoundException,SQLException
 {
     Class.forName(driver);
     connection = DriverManager.getConnection(url);
     statement = connection.createStatement();  
return statement;      
}  
   
 
 public  String[][] getResult(Statement statement ,String query) throws SQLException
 {  
  vecteur = new Vector(2,3);
   String[] tabResult=null;
   ResultSet resultSet = statement.executeQuery(query);
      ResultSetMetaData resultsMetaData = resultSet.getMetaData();
      nbColumn = resultsMetaData.getColumnCount();
       
           tabResult= new String[nbColumn];
           
          for(j=0; j<nbColumn;j++)
           {
           tabResult[j]=resultsMetaData.getColumnName(j+1);
           }
   vecteur.addElement(tabResult);
                    while(resultSet.next())  
                    {
                           for(j=0; j<nbColumn;j++)
                             {tabResult[j]=resultSet.getString(j+1);  
                             }
     
     /******ici on se rend compte que les donnée du tableau ssont bien differente*********/                        
     for(int i=0;i<tabResult.length;i++)                        
    System.out.print(tabResult[i]+"\n" );  
    /*********************************/                      
    vecteur.addElement(tabResult);
   
                    }      
                 
return cast(vecteur,nbColumn);
  }  
   
public String [][] cast(Vector v,int nbColumn)
{
 String[][] result=new String[v.capacity()][nbColumn];
 String[] ligne=null;
 int i=0;
    System.out.print("ici :contenu du vecteur...\n" );
    for (Enumeration e = v.elements() ; e.hasMoreElements() ; )  
    {
     ligne= (String[])e.nextElement();
     /*
     *toujours les memes données...(corespondant au dernier enregistrement ...)
     */
     System.out.print("ligne:"+ligne[1]+"\n" );
        for(j=0; j<ligne.length;j++)
          {result[i][j]=ligne[j];
          }  
     }
return result;  
 }
 
public int getColomnCount()
{  
return  nbColumn;
}
     
public void stop() throws SQLException
{
   connection.close();
}
 
 
public void update(Statement statement ,String query) {
   try  
   {int bc =  statement.executeUpdate(query);
    System.out.print("enregistrement mis a jour: " + bc +"\n" );
   }
    catch(SQLException sqle){
    System.out.print("erreur : " + sqle );
   }
 
 }
public static void main(String args[])
{
String result[][]=null;  
DBUtilities dbu = new DBUtilities();  
try{
Statement stm = dbu.connect("org.gjt.mm.mysql.Driver","jdbc:mysql://localhost/java" );
result= dbu.getResult(stm,"select * from selection" );//ou result est un tableau a 2 dim...
}catch(Exception e){System.out.print("prob" + e);}
 
 
}
 
 
}
///******

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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