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

  FORUM HardWare.fr
  Programmation

  [java]probleme avec les vecteurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java]probleme avec les vecteurs

n°83222
veryfree
Posté le 20-12-2001 à 10:48:55  profilanswer
 

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]

mood
Publicité
Posté le 20-12-2001 à 10:48:55  profilanswer
 

n°83230
drakkeng
Posté le 20-12-2001 à 10:58:33  profilanswer
 

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

n°83236
veryfree
Posté le 20-12-2001 à 11:11:03  profilanswer
 

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

n°83262
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 20-12-2001 à 11:57:19  profilanswer
 

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
n°83265
veryfree
Posté le 20-12-2001 à 11:59:58  profilanswer
 

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]

n°83266
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 20-12-2001 à 12:00:31  profilanswer
 

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
n°83398
veryfree
Posté le 20-12-2001 à 15:32:30  profilanswer
 

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

n°83405
- Renaud -
Posté le 20-12-2001 à 15:42:57  profilanswer
 

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]

n°83411
veryfree
Posté le 20-12-2001 à 15:48:23  profilanswer
 

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

n°83412
benou
Posté le 20-12-2001 à 15:48:44  profilanswer
 

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)

mood
Publicité
Posté le 20-12-2001 à 15:48:44  profilanswer
 

n°83418
- Renaud -
Posté le 20-12-2001 à 15:53:23  profilanswer
 

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

n°83419
veryfree
Posté le 20-12-2001 à 15:54:39  profilanswer
 

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

n°83434
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 20-12-2001 à 16:23:17  profilanswer
 

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
n°83439
benou
Posté le 20-12-2001 à 16:45:49  profilanswer
 

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

n°83475
drakkeng
Posté le 20-12-2001 à 17:45:30  profilanswer
 

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:

n°83530
veryfree
Posté le 20-12-2001 à 20:34:41  profilanswer
 

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]

n°83570
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 21-12-2001 à 09:32:05  profilanswer
 

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
n°83599
veryfree
Posté le 21-12-2001 à 11:05:58  profilanswer
 

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

n°83601
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 21-12-2001 à 11:09:03  profilanswer
 

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
n°83643
benou
Posté le 21-12-2001 à 13:28:22  profilanswer
 

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

n°83650
veryfree
Posté le 21-12-2001 à 13:37:27  profilanswer
 

benou a écrit a écrit :

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




j essaye ce soir la jpe po...

n°83750
veryfree
Posté le 21-12-2001 à 19:29:09  profilanswer
 

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);}
 
 
}
 
 
}
///******

mood
Publicité
Posté le   profilanswer
 


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

  [java]probleme avec les vecteurs

 

Sujets relatifs
Probleme prog en ligne de commande C++ / Telnet[JAVA]ScrollPane qui Scroll mal !!
[java (ou C++) + mysql] hypra débutant, demande aide :([C] probleme avec gets
[Java] petite JVM ?Apache Easy PhP probleme DNS ??
[java] debutant intêret des interfaces ?Desinstallation de JAVA JRE 1.3.1 linux
Java erreurEteindre un PC avec un programme JAVA ???
Plus de sujets relatifs à : [java]probleme avec les vecteurs


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