je remplis une HashMap avec comme clés les noms des tables d'une bdd et
comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr"
et cols obtenu par :
cols.clear();
cols.add(col);
col étant une (String) du genre "msr_id";
bien sûr j'ai vérifié au remplissage que cols.size() est non nulle
Mais quand je veux itérer sur la Hash Map :
for (int i = 0; i < tables.size(); i++) {
t = (String) tables.get(i);
System.out.println(" " + t);
cols.clear();
cols = (ArrayList) tableMap.get((String) t);
for (int j = 0; j < cols.size(); j++) {
col = (String) cols.get(j);
System.out.println(" " + col);
}
}
cols.size() est tjs à 0, je pense que ce qui ne va pas, c'est le
"tableMap.get((String) t)" et donc très vraisemblablement le
tableMap.put((String) t,(ArrayList) cols);
car il est spécifié que la clé est un objet ???
--
yt
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jerome moliere
Yvon Thoraval wrote:
je remplis une HashMap avec comme clés les noms des tables d'une bdd et comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr" et cols obtenu par : cols.clear(); cols.add(col); col étant une (String) du genre "msr_id";
bien sûr j'ai vérifié au remplissage que cols.size() est non nulle
Mais quand je veux itérer sur la Hash Map :
alors autant utiliser un Iterator!!!! methode iterator() de l'interface collection... puis hasNext() dans le for() et next() pour passer d'un element a l'autre
Jerome
-- Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003 http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean1382212111941
Yvon Thoraval wrote:
je remplis une HashMap avec comme clés les noms des tables d'une bdd et
comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr"
et cols obtenu par :
cols.clear();
cols.add(col);
col étant une (String) du genre "msr_id";
bien sûr j'ai vérifié au remplissage que cols.size() est non nulle
Mais quand je veux itérer sur la Hash Map :
alors autant utiliser un Iterator!!!!
methode iterator() de l'interface collection...
puis hasNext() dans le for() et next() pour passer d'un element a l'autre
Jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean1382212111941
je remplis une HashMap avec comme clés les noms des tables d'une bdd et comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr" et cols obtenu par : cols.clear(); cols.add(col); col étant une (String) du genre "msr_id";
bien sûr j'ai vérifié au remplissage que cols.size() est non nulle
Mais quand je veux itérer sur la Hash Map :
alors autant utiliser un Iterator!!!! methode iterator() de l'interface collection... puis hasNext() dans le for() et next() pour passer d'un element a l'autre
Jerome
-- Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003 http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean1382212111941
yvon.thoravalNO-SPAM
jerome moliere wrote:
alors autant utiliser un Iterator!!!! methode iterator() de l'interface collection... puis hasNext() dans le for() et next() pour passer d'un element a l'autre
oui, oui, j'ai vu ça, je pense aussi avoir un pb au remplissage...
... parce que ma HashMap a pour valeurs, quelque soit la clé, la dernière valeur de l'ArrayList "cols" donc ça veut dire que ce n'est pas la valeur de cols qui est passée mais sa référence dans ma boucle de lecture de sql :
for (int i = 0; i < tables.size(); i++) { t = (String) tables.get(i); rs = dbmd.getColumns(null, null, t, null); cols.clear(); while (rs.next()) { col = rs.getString ("column_name"); cols.add((String) col); } System.out.println(t + " columns = " + cols); tableMap.put((String) t,(ArrayList) cols); } System.out.println("tableMap = " + tableMap);
nb : l'ArrayList tables contient la liste des tables. dbmd vient pour DatabaseMetaData -- yt
jerome moliere <jmoliere@nerim.net> wrote:
alors autant utiliser un Iterator!!!!
methode iterator() de l'interface collection...
puis hasNext() dans le for() et next() pour passer d'un element a l'autre
oui, oui, j'ai vu ça, je pense aussi avoir un pb au remplissage...
... parce que ma HashMap a pour valeurs, quelque soit la clé, la
dernière valeur de l'ArrayList "cols" donc ça veut dire que ce n'est pas
la valeur de cols qui est passée mais sa référence dans ma boucle de
lecture de sql :
for (int i = 0; i < tables.size(); i++) {
t = (String) tables.get(i);
rs = dbmd.getColumns(null, null, t, null);
cols.clear();
while (rs.next()) {
col = rs.getString ("column_name");
cols.add((String) col);
}
System.out.println(t + " columns = " + cols);
tableMap.put((String) t,(ArrayList) cols);
}
System.out.println("tableMap = " + tableMap);
nb : l'ArrayList tables contient la liste des tables.
dbmd vient pour DatabaseMetaData
--
yt
alors autant utiliser un Iterator!!!! methode iterator() de l'interface collection... puis hasNext() dans le for() et next() pour passer d'un element a l'autre
oui, oui, j'ai vu ça, je pense aussi avoir un pb au remplissage...
... parce que ma HashMap a pour valeurs, quelque soit la clé, la dernière valeur de l'ArrayList "cols" donc ça veut dire que ce n'est pas la valeur de cols qui est passée mais sa référence dans ma boucle de lecture de sql :
for (int i = 0; i < tables.size(); i++) { t = (String) tables.get(i); rs = dbmd.getColumns(null, null, t, null); cols.clear(); while (rs.next()) { col = rs.getString ("column_name"); cols.add((String) col); } System.out.println(t + " columns = " + cols); tableMap.put((String) t,(ArrayList) cols); } System.out.println("tableMap = " + tableMap);
nb : l'ArrayList tables contient la liste des tables. dbmd vient pour DatabaseMetaData -- yt
nioTo
je remplis une HashMap avec comme clés les noms des tables d'une bdd et comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr" et cols obtenu par : cols.clear(); cols.add(col); col étant une (String) du genre "msr_id";
Vérifie tous tes appels à cols.clear(), si tu ne changes de référence pour l'objet cols, tu auras la même pour chaque valeur dans ta map, et le clear la purge.
nioTo
je remplis une HashMap avec comme clés les noms des tables d'une bdd et
comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr"
et cols obtenu par :
cols.clear();
cols.add(col);
col étant une (String) du genre "msr_id";
Vérifie tous tes appels à cols.clear(),
si tu ne changes de référence pour l'objet cols, tu auras la même
pour chaque valeur dans ta map, et le clear la purge.
je remplis une HashMap avec comme clés les noms des tables d'une bdd et comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr" et cols obtenu par : cols.clear(); cols.add(col); col étant une (String) du genre "msr_id";
Vérifie tous tes appels à cols.clear(), si tu ne changes de référence pour l'objet cols, tu auras la même pour chaque valeur dans ta map, et le clear la purge.
nioTo
yvon.thoravalNO-SPAM
nioTo <nioto+ wrote:
Vérifie tous tes appels à cols.clear(), si tu ne changes de référence pour l'objet cols, tu auras la même pour chaque valeur dans ta map, et le clear la purge.
oui, c'est bien le pb que je rencontre, ça veut dire que ce n'est pas la valeur de l'ArrayList cols qui est passée à HashMap mais la réréfence donc, je dois faire un truc du genre :
cols_[i] = cols
et (HashMap) tableMap.put(t, col[i]); sinon toutes les valeurs , qqsoit la clé, de ma HashMap prennent la dernière valeur de cols... -- yt
nioTo <nioto+news@nioto.com.NoSpamMerci> wrote:
Vérifie tous tes appels à cols.clear(),
si tu ne changes de référence pour l'objet cols, tu auras la même
pour chaque valeur dans ta map, et le clear la purge.
oui, c'est bien le pb que je rencontre, ça veut dire que ce n'est pas la
valeur de l'ArrayList cols qui est passée à HashMap mais la réréfence
donc, je dois faire un truc du genre :
cols_[i] = cols
et (HashMap) tableMap.put(t, col[i]); sinon toutes les valeurs , qqsoit
la clé, de ma HashMap prennent la dernière valeur de cols...
--
yt
Vérifie tous tes appels à cols.clear(), si tu ne changes de référence pour l'objet cols, tu auras la même pour chaque valeur dans ta map, et le clear la purge.
oui, c'est bien le pb que je rencontre, ça veut dire que ce n'est pas la valeur de l'ArrayList cols qui est passée à HashMap mais la réréfence donc, je dois faire un truc du genre :
cols_[i] = cols
et (HashMap) tableMap.put(t, col[i]); sinon toutes les valeurs , qqsoit la clé, de ma HashMap prennent la dernière valeur de cols... -- yt
Christophe M
Voir correction ci-dessous
Yvon Thoraval wrote:
je remplis une HashMap avec comme clés les noms des tables d'une bdd et comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr" et cols obtenu par : Dans le remplissage de tablemap :
cols = new ArrayList(); // cols.clear(); Pas besoin puisque c'est un nouveau
cols.add(col); col étant une (String) du genre "msr_id";
bien sûr j'ai vérifié au remplissage que cols.size() est non nulle
Mais quand je veux itérer sur la Hash Map :
for (int i = 0; i < tables.size(); i++) { t = (String) tables.get(i); System.out.println(" " + t);
// Ici le clear vide cols, donc la liste des champs de la table // cols.clear(); Pas besoin
cols.size() est tjs à 0, je pense que ce qui ne va pas, c'est le "tableMap.get((String) t)" et donc très vraisemblablement le tableMap.put((String) t,(ArrayList) cols);
Normal vu qu'il met tjrs la même référence dans tablemap, et qu'avant l'affichage tu fais un clear()
car il est spécifié que la clé est un objet ???
Oui, mais comme une String est un objet, y a pas de souci :-)
Voir correction ci-dessous
Yvon Thoraval wrote:
je remplis une HashMap avec comme clés les noms des tables d'une bdd et
comme valeur la liste des noms des colonnes pour une clé donnée :
remplissage :
tableMap.put((String) t,(ArrayList) cols);
avec, par ex t = "t_mesure_msr"
et cols obtenu par :
Dans le remplissage de tablemap :
cols = new ArrayList();
// cols.clear(); Pas besoin puisque c'est un nouveau
cols.add(col);
col étant une (String) du genre "msr_id";
bien sûr j'ai vérifié au remplissage que cols.size() est non nulle
Mais quand je veux itérer sur la Hash Map :
for (int i = 0; i < tables.size(); i++) {
t = (String) tables.get(i);
System.out.println(" " + t);
// Ici le clear vide cols, donc la liste des champs de la table
// cols.clear(); Pas besoin
cols.size() est tjs à 0, je pense que ce qui ne va pas, c'est le
"tableMap.get((String) t)" et donc très vraisemblablement le
tableMap.put((String) t,(ArrayList) cols);
Normal vu qu'il met tjrs la même référence dans tablemap, et qu'avant
l'affichage tu fais un clear()
car il est spécifié que la clé est un objet ???
Oui, mais comme une String est un objet, y a pas de souci :-)
cols.size() est tjs à 0, je pense que ce qui ne va pas, c'est le "tableMap.get((String) t)" et donc très vraisemblablement le tableMap.put((String) t,(ArrayList) cols);
Normal vu qu'il met tjrs la même référence dans tablemap, et qu'avant l'affichage tu fais un clear()
car il est spécifié que la clé est un objet ???
Oui, mais comme une String est un objet, y a pas de souci :-)
yvon.thoravalNO-SPAM
Christophe M <mccricri_at_hotmail.com> wrote:
cols = new ArrayList();
ok, merci, j'ai pigé avec ce new Arra(); je "force" le changement de réf.
maintenant ca marche impec.
mais bon, je continue à lire la doc °;=)
j'ai découvert, entre temps, que j'aurais du utilisé HashSet (éléments uniques) plutôt que HashMap... -- yt
Christophe M <mccricri_at_hotmail.com> wrote:
cols = new ArrayList();
ok, merci, j'ai pigé avec ce new Arra(); je "force" le changement de
réf.
maintenant ca marche impec.
mais bon, je continue à lire la doc °;=)
j'ai découvert, entre temps, que j'aurais du utilisé HashSet (éléments
uniques) plutôt que HashMap...
--
yt