如何在单个 JTable 中连接来自 2 个不同表的数据

How to Join data from 2 different tables in a single JTable

我正在为员工管理系统制作程序。现在我正在为员工注册制作 CRUD 表单,我在数据层、业务逻辑和 gui 中分离了 src 代码。在 gui 中,我分离了 gui 视图和 gui 模型,在 Gui 模型中,我创建了一个 EmployeeTableModel ,以指定我想如何显示员工 Table 的数据,但在那个 table 中,我得到了来自多个 table ,一个是来自数据库的 Employee table 另一个是 Phone .. 我已经成功地从 Employee Table 获取了数据,我可以将这些数据放在 Employee Table 和 Phone table 在数据库中,但我无法将它们放入 Table 模型中,我只能从员工那里获取数据。

PHOTO OF THE TABLE

ALL SOURCE CODE HERE - GIT

我尝试更改我的 EmployeeTableModel 中的代码以接受更多列并设法从 telephone table 添加数据,但没有成功因为每个员工有 2 -3 phone 个数字,并且 Employee_ID 被指定为 Phone table 上的外键。每个员工有 3 个 phone 作为我说过,当我们指定要获取哪个 phone 时,它依赖于 employee_id,它是 Phone table.

中的外键
public class PunetoriTableModel extends AbstractTableModel {

List<Punetori> list;
TelefoniRepository tr = new TelefoniRepository();
PunetoriRepository pr = new PunetoriRepository();

String[] cols = {"Nr.", "Nr-Departmentit", "Emri", "Mbiemri", "Email", "Qyteti","Adresa","tel1","tel2"};

public PunetoriTableModel() {
}

public PunetoriTableModel(List<Punetori> list) {
    this.list = list;
}

public void addList(List<Punetori> list) {
    this.list = list;
}

@Override
public String getColumnName(int col) {
    return cols[col];
}

@Override
public int getRowCount() {
    return list.size();
}

public void remove(int row) {
    list.remove(row);
}

public Punetori getPersoni(int index) {
    return list.get(index);
}

@Override
public int getColumnCount() {
    return cols.length;
}

public String getDateToString(Date d) {
    DateFormat da = new SimpleDateFormat("dd-MM-yyyy");
    return da.format(d);

}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
     Punetori p = list.get(rowIndex) ;


        switch (columnIndex) {
            case 0:
                return p.getPunetoriID();
            case 1:
                return p.getDepartmentiId();
            case 2:
                return p.getEmri();
            case 3:
                return p.getMbiemri();
            case 4:
                return p.getEmail();
            case 5:
                return p.getQyteti();
            case 6:
                return p.getAdresa();




            default:
                return null;
        }
    }
}

首先决定你的专栏是什么。当一些员工拥有不止一个 phone 时,您似乎对这些列应该是什么感到困惑。目前还不清楚你的问题是什么,但可能只是把它画在一张纸上就可以让你头脑清醒。

还要确定这些列是固定的还是动态的(即是否可以为某些员工获取更多列,您需要将这些列添加到您的table?)

其次,创建一个单独的数据结构,让我们称之为 class EmployeeData,它捕获您想要的信息。将其与 PunetoriTableModel 分开。从您的数据存储库中填充它。 在其中放置决定使用哪个 phone 的必要逻辑,或者您需要的任何自定义业务逻辑。

使 EmployeeData 提供一些 public 方法,例如 getColumns()getRowCount()getRow(int i)

PunetoriTableModel 的构造函数中,只需传递 EmployeeData 并在各自的方法中调用 EmployeeData 方法。这样,table 模型将数据视为 table,并且您拥有自定义逻辑,将来自不同 table 的数据组合成一个单独的数据。