2010-11-13 6 views
0

J'ai été à cela pendant un certain temps et j'ai essayé différents exemples (y compris quelques-uns que j'ai trouvé ici), et j'ai essayé de les adapter à ce dont j'ai besoin.La requête DB ne remplit pas la zone de liste déroulante ... pourquoi?

J'essaie d'utiliser une requête de base de données dans une servlet pour remplir une zone de liste modifiable dans le formulaire html résultant qui est créé. Alors que tout se compile et que la page s'ouvre avec une combobox, il n'y a rien dans la boîte à choisir, ce qui me dit que quelque chose ne va pas avec la façon dont je passe des variables.

J'ai fondamentalement réduit mes méthodes à deux, mais obtenir les mêmes résultats des deux.
Quelqu'un peut-il avoir un look-see et me donner un indice?

out.print(`"<tr><td>SoldWhich Home ID: `</td><td>"`); 
//Query table for results to go into option box 
ResultSet rs1 = null; 
Statement stmt1 = null; 
Connection con1 = null; 

try { 
    Class.forName(DRIVER); 
    con1 = DriverManager.getConnection(URL, username, password); 
    String sql = "SELECT home_id FROM Home"; 
    stmt1 = con1.createStatement(); 
    rs1 = stmt1.executeQuery(sql); 
    ArrayList<String> soldWhich = new ArrayList<String>(); 
    List<String> soldWhich = new ArrayList<String>(); 

    while (rs1.next()){ 
     for (int i=1;i<=rs1.getRow(); i++){ 
      String value = rs1.getString(1); 
      soldWhich.add(value); 
     } 
    } 
} 
catch(Exception e){} 
//Begin option box 
out.print(`"<select width=\"150px\" align=\"right\" name=\"soldWhichBox\">"`); 
String soldWhich[] = (String[])req.getAttribute("home_id"); 
//populate with query output 
try{ 
    for(String sh : soldWhich){ 
     out.print(`"<option width=\"150px\" align=\"right\" value=\""+sh+"\">"+sh+"</option>"`); 
    } 
    rs1.close(); 
    con1.close(); 
} 

catch (Exception e){} 
out.print(`"</select>"`); 
out.print(`"</td></tr>"`); 

Et l'autre méthode:

out.print(`"<tr><td>SoldWhich Home ID: </td><td>"`); 
//Query table for results to go into option box 
ResultSet rs1 = null; 
Statement stmt1 = null; 
Connection con1 = null; 
try{ 

    Class.forName(DRIVER); 
    con1 = DriverManager.getConnection(URL, username, password); 
    String sql = "SELECT home_id FROM Home ORDER BY home_id"; 
    stmt1 = con1.createStatement(); 
    rs1 = stmt1.executeQuery(sql); 
    List<String> soldWhich = new ArrayList<String>(); 

    while (rs1.next()){ 
     soldWhich.add(rs1.getString(1)); 
    } 
} 
catch(Exception e){} 
//Begin option box 
out.print(`"<select width=\"150px\" align=\"right\" name=\"soldWhichBox\">"`); 
String soldWhich[] = (String [])req.getAttribute("home_id"); 
//populate with query output 
try{ 
    for(String sh : soldWhich){ 
     out.print(`"<option width=\"150px\" align=\"right\" value=\""+sh+"\">"+sh+"</option>"`); 
    } 
    rs1.close(); 
    con1.close(); 
} 
catch (Exception e){} 
out.print(`"</select>"`); 
out.print(`"</td></tr>"`); 

Répondre

0

Où définissez-vous l'attribut de requête "home_id" et pourquoi le réglez-vous même? Je pense que vous devriez sortir la ligne de code suivante et voir si cela fonctionne. Modifiez votre code pour cela.

List<String> soldWhich = null; 
try { 
    Class.forName(DRIVER); 
    con1 = DriverManager.getConnection(URL, username, password); 
    String sql = "SELECT home_id FROM Home"; 
    stmt1 = con1.createStatement(); 
    rs1 = stmt1.executeQuery(sql); 
    soldWhich = new ArrayList<String>(); 

    while (rs1.next()){ 
     for (int i=1;i<=rs1.getRow(); i++){ 
      String value = rs1.getString(1); 
      soldWhich.add(value); 
     } 
    } 
} 
+0

ok ... laissez-moi essayer – gcurrier

+0

En fait, si je supprime cette ligne, la variable "soldWhich" dans la boucle for-each devient non-initialisée ... soupir ... de plus en plus compliqué à la minute ... – gcurrier

+0

Définir la liste VenduQui se trouve avant le bloc try et de prendre la liste dans le bloc try. – CoolBeans

0

Je pense que vous n'êtes pas réellement obtenir des valeurs (sh) dans le "pour (String sh: soldWhich)" boucle. Pouvez-vous essayer d'imprimer les valeurs dans un tableau simple juste pour voir si vous obtenez réellement des données? Aussi pourquoi n'utilisez-vous pas jstl pour effectuer cette tâche? Et votre bloc d'accrochage ne consigne aucune erreur, au cas où vous auriez des erreurs qui passeraient inaperçues.

+0

Certes, je ne reçois pas de valeurs. Lorsque je laisse le second bloc catch, j'obtiens une exception de pointeur null sur la ligne de boucle for-eacc. – gcurrier

+0

De plus, je ne suis pas familier avec l'utilisation de JSP et je ne suis pas très sûr de la façon de tout modifier (de html à jsp en servlet). Je suis fondamentalement (comme vous pouvez probablement le dire) allant d'une page html à la servlet. Sans les blocs select et option, je peux afficher des données pour n'importe quelle requête (à condition que le sql soit correct) mais essayer d'obtenir un resultset dans la combobox est, pour le moment, me battre. Je pourrais vraiment utiliser de l'aide ... – gcurrier

Questions connexes