2017-03-29 1 views
0

J'ai un service Web qui renvoie ArrayList<String> à partir de la base de données. J'ai besoin de remplir un jTable sur l'application Java client avec ce ArrayList. Comment est-ce que je peux organiser le ArrayList, ainsi il montre dans les rangées correctes sur la table? Actuellement, il retourne chaque élément, séparé par une virgule.Remplir jTable à partir de ArrayList <String>, sans créer de nouvelle classe.

Voici le bit WebMethod:

@WebMethod(operationName = "ListCustomers") 
public ArrayList ListCustomers() { 
    try{ 
     Class.forName("org.apache.derby.jdbc.ClientDriver"); 
     Connection con = DriverManager.getConnection("jdbc:derby://localhost:1527/BankDB", "bankadmin", "bankadmin"); 
     Statement st = con.createStatement(); 
     PreparedStatement prst = con.prepareStatement("select Name, AccountNumber from CUSTOMERS"); 
     ArrayList<String> list = new ArrayList<>(); 
     ResultSet rs = prst.executeQuery();  

     while(rs.next()){ 
      String nm = rs.getString("Name"); 
      String an = rs.getString("AccountNumber").toString(); 
      list.add(new String (nm)); 
      list.add(new String (an));   
     } 
     return (ArrayList) list; 
    } 
    catch(SQLException ex){ 
     System.err.println(ex.getMessage()); 
     return null; 
    } 
    catch (ClassNotFoundException ex) { 
     Logger.getLogger(BankServerService.class.getName()).log(Level.SEVERE, null, ex); 
     System.out.println("second"); 
     return null; 
    } 
    finally{ 
     if(st != null){ 
      try { 
       st.close(); 
      } 
      catch(SQLException ex){ 
       System.out.println("Could not close statement"); 
      } 
     } 
    } 
} 

Ce retour:

[TestName1, 46484654897, Name2, 646543543, emp3, 534354354] 

Le nœud client ressemble à ceci, que je dirige dans une autre méthode:

listCustomers();   
     DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); 
     Object rowData[] = new Object[listCustomers().size()]; 
     for (int i=0; i<listCustomers().size(); i++){ 
      rowData[i] = listCustomers().get(i); 
      model.addRow(rowData); 
     } 

Ce Remplit seulement TestName1, 46484654897, en comme 10 lignes.

J'ai besoin de montrer TestName1, Name2, emp3, sur des lignes séparées sur la 1ère colonne de la table, et 46484654897, 646543543, 534354354 sur des lignes séparées sur la 2ème colonne.

+0

Pour clarifier: Essayez-vous de le faire créer une table qui a le nom et le numéro de compte, 1 par ligne? donc: testname1, 46484654897 sur la première rangée, name2, 646543543 sur la deuxième rangée, etc? –

+0

Correct, c'est l'objectif. –

Répondre

0

Si votre objectif est de mettre chaque nom/combinaison de numéros de compte sur sa propre ligne, mais que vous les avez tous dans une seule liste, vous devrez faire quelque chose d'un peu différent.

listCustomers();   
DefaultTableModel model = (DefaultTableModel) jTable1.getModel(); 
for(int i = 0; i < listCustomers.size(); i+=2){ 
    Object[] rowdata = new Object[] {listCustomers.get(i), listCustomers.get(i+1)}; 

    model.addRow(rowdata); 
} 

Vous incrémenter i 2 chaque fois, puisque vous ne vous préoccupez numéro de nom + combo compte, et il va par paire. Deuxièmement, vous voulez seulement transmettre model.addRow le tableau d'objets avec les données que vous voulez pour cette ligne. Vous étiez en train d'ajouter chaque chaîne dans listcustomer, puis en ajoutant le tableau entier au modèle en tant que ligne. Ci-dessus J'ai simplement ajouté un nouveau tableau d'objets rowdata dans la boucle for, et l'ai rempli avec la valeur de i (le nom) et la valeur de i + 1 (le numéro de compte). Gardez à l'esprit que cela sera désynchronisé si, pour une raison quelconque, un nom ou un numéro de compte est manquant.

+0

Cela a fonctionné! Merci beaucoup! –