从sql中的一行在java表中创建多个重复行

从sql中的一行在java表中创建多个重复行,java,mysql,sql,database,swing,Java,Mysql,Sql,Database,Swing,我创建了一个GUI,它链接到数据库,检索值,并使用swing将其显示在表中。但由于某些原因,该表为sql表中的每一行显示了多个重复行。发生了什么?这是从数据库检索数据的代码块。这是GUI表的外观。 这是数据库表 我猜您是想同时访问两个表。在这种情况下,,您可以基于company\u id像select*from companys internal join plants on companys.company\u id=plants.companys\u id WHERE companys.c

我创建了一个GUI,它链接到数据库,检索值,并使用swing将其显示在表中。但由于某些原因,该表为sql表中的每一行显示了多个重复行。发生了什么?这是从数据库检索数据的代码块。这是GUI表的外观。 这是数据库表


我猜您是想同时访问两个表。在这种情况下,,您可以基于
company\u id
select*from companys internal join plants on companys.company\u id=plants.companys\u id WHERE companys.company\u id=?
您的结果集中几乎肯定没有一行:您的查询正在生成交叉连接,因为这两行之间没有任何关联桌子。明确列出联接并在子句中包含一个
。是。这就是我意识到的。您正在从两个表中选择数据。您没有以任何方式链接表,因此数据库提供笛卡尔积,也称为交叉连接,将一个表中的每一行链接到另一个表中的每一行。因此,如果您有5家公司和10家工厂,您将返回50行。为了避免这种情况,请使用类似于
select*from companys internal JOIN plants ON companys.company\u id=plants.company\u id where…
i尝试了内部连接方法,但现在返回的表为空。我需要进一步更改代码吗?
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/nic?useSSL=false", "student" , "student");
PreparedStatement ps=con.prepareStatement("select * from companies, plants where plants.company_id=?");
ps.setString(1,id);
ResultSet rs=ps.executeQuery();
if(rs.next())
    jLabel1.setText(rs.getString("company_name_l"));
rs.previous();
while(rs.next()){
    DefaultTableModel model=(DefaultTableModel) jTable1.getModel();
    String row[]={rs.getString("plant_id"),rs.getString("plant_name_l"),rs.getString("plant_name_s")};
    model.addRow(row);
}