好的,所以我有一个方法可以从数据库中获取数据并将其放入这样的列表中:
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();
}
这工作得很好,但是当我从表中删除一些行时,它们被设置为空并且我没有在 jTable 中显示它们。如果它的值为空,我如何将它们也添加到只有一个空单元格的 jTable 中?
最佳答案
在数据库方面,如果您因为尝试连接具有空值的表而看不到行,则使用 LEFT JOIN
而不是 JOIN
在 UI 端,DefaultTableCellRenderer
将为任何 null
对象返回一个空字符串。如果您仍然在 JTable
中看到 null
,那么这很可能是由您的数据库作为字符串值“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);
关于java - 当表包含使用连接的空值时,如何将数据从数据库添加到 Java Swing 中的 jTable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39356489/