probleme avec les vecteurs [java] - Programmation
Marsh Posté le 20-12-2001 à 10:58:33
je savais pâs que l'on pouvait faire des vecteur a deux dimenssions!!
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
Marsh Posté le 20-12-2001 à 11:57:19
Pfff que c pas bo
Commence par faire vecteur = new Vector();
Marsh Posté le 20-12-2001 à 11:59:58
darklord22 a écrit a écrit : Pfff que c pas bo 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]
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
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
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
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]
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
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)
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
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
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
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
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+
Marsh Posté le 20-12-2001 à 16:45:49
veryfree a écrit a écrit : heu 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 ...
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;
}
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 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
Marsh Posté le 20-12-2001 à 20:34:41
benou a écrit a écrit : ha ouais tiens ... 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 )
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]
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+
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"...
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 ...
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...
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);}
}
}
///******
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]