2017-03-29 12 views
0

データベースからArrayList<String>を返すWebサービスがあります。私はArrayListでクライアントJavaアプリケーションのjTableを設定する必要があります。 ArrayListはどうすれば整理できますか?表の正しい行に表示されますか?現在はすべての要素をカンマで区切って返します。ここで新しいクラスを作成せずに、ArrayList <String>からjTableを生成します。

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

これが返されます。

[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,を表の第1列の別々の行に表示し、第2列の別の行に46484654897, 646543543, 534354354と表示する必要があります。

+0

明確にする:1行に1つの名前とアカウント番号を持つテーブルを作成しようとしていますか? testname1、46484654897、name2、646543543、2行目など? –

+0

正しいです、それが目標です。 –

答えて

0

それぞれの名前/アカウント番号の組み合わせを自分の行に配置することを目標にしていますが、それらをすべて1つのリストに入れている場合は、少し違うことをする必要があります。

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

あなたは名前+アカウント番号のコンボのみを気にするので、毎回iを2ずつ増やしてペアになります。

第2に、model.addRowに、その行に必要なデータを含むオブジェクト配列を渡したいだけです。あなたはそれにlistcustomerのすべての文字列を追加してから、配列全体を行としてモデルに追加していました。

上記のように、私は新しいループデータオブジェクトの配列をforループの中に追加し、i(名前)の値とi + 1(口座番号)の値で値を設定しました。名前や口座番号が何らかの理由で欠けている場合は、同期が外れることに注意してください。

+0

それはうまくいった!どうもありがとうございました! –

関連する問題