2016-09-06 4 views
1

[OK]をので、私は、DBからデータを取得し、このようなリストにそれを置く方法があります:DBからjTableへのデータをJavaで追加するにはどうすればいいですか?

public List<Sale> getSales() throws SQLException{ 
    List<Sale> res = new ArrayList<Sale>(); 
    Statement st = conn.createStatement(); 
    ResultSet rs = st.executeQuery("select sale.id,product.name,sale.price,sale.quantity,sale.total,employee.name,buyer_seller.name from sale " 
      + "      join product on sale.product = product.id " 
      + "      join employee on sale.salesman = employee.id " 
      + "      join buyer_seller on sale.buyer = buyer_seller.id;"); 
    while(rs.next()){ 
     res.add(new Sale (rs.getInt(1),new Product(-1,rs.getString(2),new Category(-1,"",""),new Manufacturer(-1,"",""),0.0,-1),rs.getDouble(3),rs.getInt(4),rs.getDouble(5),new Employee(-1,rs.getString(6),"","",new JobCategory(-1,"",""),"",""),new BuyerSeller(-1,rs.getString(7),"","",""))); 
    } 
    return res; 
} 

をして、私はそのデータをJTableのを埋める方法があります:

public void fillSales(){ 
    jLabel1.setText("Podaci se ucitavaju iz baze..."); 
    SwingWorker sw = new SwingWorker() { 
     @Override 
     protected Object doInBackground() throws Exception { 
      MyShopRepository repo = MyShopRepository.getInstance(); 
      List<Sale> allSale = repo.getSales(); 
      return allSale; 
     } 
     @Override 
     protected void done() { 
      super.done(); 
      try { 
       List<Sale> res = (List<Sale>)get(); 
       DefaultTableModel dtm = (DefaultTableModel)jTable1.getModel(); 
       int redova = dtm.getRowCount(); 
       for(int i=0;i<redova;i++){ 
        dtm.removeRow(0); 
       } 
       for(Sale s : res){ 
        dtm.addRow(new Object[]{ 
         s.id,s.product.name,s.price,s.quantity,s.total,s.salesman.name,s.buyer.name 
        }); 
       } 
       jLabel1.setVisible(false); 
      } catch (InterruptedException | ExecutionException ex) { } 
     } 
    }; 
    sw.execute(); 
} 

をこれはうまく動作しますが、テーブルからいくつかの行を削除すると、nullに設定され、jTableに表示されません。その値がnullの場合、どのように空のセルだけでjTableにも追加できますか?データベース側では

+0

iは別のテーブルへのFKを持つDBテーブルから行を削除すると、私はDELETEでの使用、その上にFKを有するカラムの値NULLを有するであろうJTableの行を参照して傾けますSET NULL。 –

答えて

2

あなたがnull値を持つテーブルをまたいで参加しようとしているので、あなたがUI側でLEFT JOINではなくJOIN

を使用し、その後、行が表示されない場合は、DefaultTableCellRendererは空の文字列を返します。任意のnullオブジェクトの場合まだJTablenullが表示されている場合は、データベースによって「null」の文字列値として返されている可能性があります。文字列値nullを回避するには、DefaultTableCellRendererを拡張し、setValueメソッドをオーバーライドして「null」文字列値を考慮に入れることができます。例えば:

DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){ 
    @Override 
    protected void setValue(Object value) { 
     setText((value == null || value.toString().equalsIgnoreCase("null")) ? "" : value.toString()); 
    } 
}; 
table.setDefaultRenderer(Object.class, renderer); 
+0

jTableに何も表示されません。その行のいくつかの列がDBにnull値を持っていて、行が表示され、列が空になっているだけです。 –

+0

私はこれを持っています:https:// postimg .org/image/rj1z6atib /、 "Radno mesto"という列は、FKでこれに接続された別のテーブルです:https://postimg.org/image/73as5etgt/、 "sef"を "Radno (最初のリンク) –

+0

'私はそれらの行を表示し、それらの列を空にするだけです' '左の結合 'を使用 – copeg

関連する問題