2017-03-29 1 views
0

데이터베이스에서 ArrayList<String>을 반환하는 웹 서비스가 있습니다. 클라이언트 파일에 jTable을 채우고 ArrayList으로 채워야합니다. ArrayList을 어떻게 구성하면 테이블의 올바른 행에 표시됩니까? 현재 모든 요소를 ​​쉼표로 구분하여 반환합니다.새 클래스를 만들지 않고 ArrayList <String>에서 jTable을 채 웁니다.

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

이 반환 : 여기

는에 WebMethod 비트입니다

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

내가 다른 방법으로 실행 노드는 다음과 같습니다 클라이언트 :

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

이 채워집니다를 TestName1, 46484654897, 만 10 행을 넣습니다.

테이블의 첫 번째 열에 별도의 행에 TestName1, Name2, emp3,을 표시하고 두 번째 열에 별도의 행에 46484654897, 646543543, 534354354을 표시해야합니다.

+0

명확히하기 : 행당 하나씩 이름과 계좌 번호가있는 테이블을 만들려고합니까? 그래서 : testname1, 첫 번째 행에 46484654897, name2, 두 번째 행에 646543543 등? –

+0

맞습니다. 이것이 목표입니다. –

답변

0

귀하의 목표는 각 이름/계좌 번호 조합을 자신의 행에 넣는 것이지만 모두 하나의 목록에 넣었 으면 조금 다른 것을해야합니다.

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

이름 + 계정 번호 콤보 만 고려하므로 매번 2 씩 증가하며 쌍으로 표시됩니다.

두 번째로 원하는 행의 데이터로 model.addRow 객체 배열 만 전달하려고합니다. listcustomer의 모든 문자열을 추가 한 다음 전체 배열을 모델로 행으로 추가했습니다.

위의 예제에서는 for 루프 내에 새로운 rowdata 객체 배열을 추가하고 i (이름)의 값과 i + 1 (계정 번호)의 값을 채 웁니다. 어떤 이유로 이름이나 계좌 번호가 누락되면 동기화되지 않게됩니다.

+0

그게 효과가! 고마워요! –

관련 문제