2017-03-29 3 views
0

Ich habe einen Web Service, der ArrayList<String> von Datenbank zurückgibt. Ich muss eine jTable auf Client-Java-Anwendung mit dem ArrayList auffüllen. Wie kann ich die ArrayList so organisieren, dass sie in richtigen Zeilen auf dem Tisch erscheint? Momentan gibt es jedes Element zurück, getrennt durch Komma. HierFüllen Sie jTable aus ArrayList <String>, ohne eine neue Klasse zu erstellen.

ist das WebMethod Bit:

@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"); 
      } 
     } 
    } 
} 

Das gibt:

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

Der Client-Knoten wie folgt aussieht, die ich in einem anderen Verfahren laufen:

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

Diese bevölkert nur TestName1, 46484654897, in etwa 10 Zeilen.

Ich muss TestName1, Name2, emp3, in separaten Zeilen in der ersten Spalte der Tabelle und 46484654897, 646543543, 534354354 in separaten Zeilen in der zweiten Spalte anzeigen.

+0

Zur Klarstellung: Versuchen Sie, eine Tabelle zu erstellen, die den Namen und die Kontonummer 1 pro Zeile enthält? Also: testname1, 46484654897 in der ersten Zeile, name2, 646543543 in der zweiten Zeile, etc? –

+0

Richtig, das ist das Ziel. –

Antwort

0

Wenn Ihr Ziel darin besteht, jede Kombination aus Name und Kontonummer in einer eigenen Zeile zu speichern, aber Sie alle in einer einzigen Liste haben, müssen Sie etwas anderes machen.

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

Sie erhöhen i von 2 jedes Mal, da man nur über Namen + Kontonummer Combo kümmern, und es geht in Paaren.

Zweitens möchten Sie nur model.addRow das Objekt-Array mit den Daten für diese Zeile übergeben. Sie haben jede Zeichenfolge in listcustomer hinzugefügt und dann das gesamte Array als Zeile in das Modell eingefügt.

Oben habe ich gerade ein neues rowdata Objektarray innerhalb der for-Schleife hinzugefügt und es mit dem Wert bei i (der Name) und dem Wert bei i + 1 (die Kontonummer) gefüllt. Beachten Sie, dass dies nicht mehr synchron ist, wenn aus irgendeinem Grund ein Name oder eine Kontonummer fehlt.

+0

Das hat funktioniert! Vielen Dank! –

Verwandte Themen