Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaSwing中,当表使用联接包含空值时,如何将数据从DB添加到jTable?_Java_Mysql_Swing - Fatal编程技术网

在JavaSwing中,当表使用联接包含空值时,如何将数据从DB添加到jTable?

在JavaSwing中,当表使用联接包含空值时,如何将数据从DB添加到jTable?,java,mysql,swing,Java,Mysql,Swing,好的,我有一个方法,从DB中获取数据,并将其放入如下列表: 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,

好的,我有一个方法,从DB中获取数据,并将其放入如下列表:

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;
}
public List getSales()引发SQLException{
List res=new ArrayList();
语句st=conn.createStatement();
结果集rs=st.executeQuery(“从销售中选择sale.id、product.name、sale.price、sale.quantity、sale.total、employee.name、买方\卖方名称”
+“加入销售中的产品。产品=产品。id”
+“加入销售中的员工。sales=employee.id”
+“加入销售中的买方\卖方。买方=买方\卖方。id;”;
while(rs.next()){
res.add(新销售(rs.getInt(1)、新产品(-1、rs.getString(2)、新类别(-1、”、“”)、新制造商(-1、”、“”)、0.0、-1)、rs.getDouble(3)、rs.getInt(4)、rs.getDouble(5)、新员工(-1、rs.getString(6)、“”、“”、“”、“”、“”、“”)、新采购商(-1、rs.getString(7)、“”、“”、“”);
}  
返回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();
}
public void fillSales(){
jLabel1.setText(“Podaci se ucitavaju iz baze…”);
SwingWorker sw=新SwingWorker(){
@凌驾
受保护对象doInBackground()引发异常{
MyShopRepository repo=MyShopRepository.getInstance();
List allSale=repo.getSales();
退还所有销售;
} 
@凌驾
受保护的void done(){
超级。完成();
试一试{
List res=(List)get();
DefaultTableModel dtm=(DefaultTableModel)jTable1.getModel();
int redova=dtm.getRowCount();

对于数据库端的(int i=0;i,如果由于试图跨空值的表进行联接而看不到行,则使用
左联接
而不是
联接

在UI端,
DefaultTableCellRenderer
将为任何
null
对象返回一个空字符串。如果在
JTable
中仍看到
null
,则数据库很可能会将其作为字符串值“null”返回。若要绕过空字符串值,可以扩展
DefaultTableCellRenderer
并重写
setValue
方法以考虑“空”字符串值。例如:

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

当我从DB表中删除一行(其中有一个FK)到另一个表时,我看不到JTTable中的行,该行上有一个FK的列的值为null,我使用on delete SET null。如果该行的某些列在DB中有一个null值,并且我希望它们的行可见,并且只显示它们的列,我在JTTable中看不到任何内容空..我有这个:,列“Radno mesto”也是另一个与FK连接的表,当我从表“Radno mesto”(第二个链接)中删除“sef”时,我在第一个表(第一个链接)中看不到任何内容
我确实希望它们的行可见,它们的列只显示为空
使用
左连接