Java如何在两个表中添加数据(关系数据库)

Java如何在两个表中添加数据(关系数据库),java,mysql,database,swing,Java,Mysql,Database,Swing,我正在Swing中制作一个桌面应用程序。 问题是: 我有两个表-供应商和项目 supplier supplierid(PK,AI),name,address,telephone item itemid(PK,AI),supplier_supplierID(FK),name 问题: 如何同时在供应商和项目表中插入?项中的外键是自动添加还是必须显式添加 如何仅为特定供应商添加项目?我正在考虑一些列表,下拉菜单选择供应商->获得他的PK并插入到项目表中 我正在使用Netbeans,My

我正在Swing中制作一个桌面应用程序。 问题是:

我有两个表-
供应商
项目

supplier  supplierid(PK,AI),name,address,telephone
item     itemid(PK,AI),supplier_supplierID(FK),name
问题:

  • 如何同时在
    供应商
    项目
    表中插入?
    项中的外键是自动添加还是必须显式添加
  • 如何仅为特定供应商添加项目?我正在考虑一些列表,下拉菜单选择供应商->获得他的PK并插入到项目表中
我正在使用Netbeans,MySQL


谢谢

这取决于您试图访问数据库的方式。 使用像Hibernate和类似的ORM将为您完成大部分工作,因为它处理实体之间的依赖关系

如果您使用普通JDBC访问数据库,那么您应该按照正确的顺序手动插入“行”。 因此,您应该先插入供应商,然后插入依赖项。 如果供应商已经存在,则应首先获取其id,并在保存项目时将该值作为supplier\u supplierID传递


但这一切与春天无关

您必须先添加父行(供应商),然后添加项目。否则您将得到一个错误


添加供应商时,您使用新的供应商id作为项目的值。

此代码不是最好的,但它可以工作,首先在主表中插入一些数据,然后获取主id,然后在此代码中外键位置用7替换它。所以,一旦它工作,然后找到一种方法来处理外键,我没有工作

     try {   


          String url ="jdbc:mysql://localhost/dbtec";          

    Class.forName("com.mysql.jdbc.Driver");
     conn = DriverManager.getConnection(url,userdb,pass);

         PreparedStatement statement = (PreparedStatement) conn.prepareStatement(" INSERT INTO supplier(name,address,telephone
) VALUES(?,?,?)");
         statement.setString(1,"stackoverflow");
         statement.setString(2,”15 newyork”);
         statement.setString(3,"+19898989");
         statement.executeUpdate();
                  statement.close();

         /// Insert into another table 

         PreparedStatement statement2= (PreparedStatement) conn.prepareStatement("INSERT INTO item(supplierID,name) VALUES (?,?) ");
         statement2.setString(1,"7");
         statement2.setString(2,"Bruce");
         statement2.executeUpdate();
                  statement2.close();   
                  conn.close();
     }
     catch(SQLException e){
         e.printStackTrace();

     }  catch (ClassNotFoundException ex) {
            Logger.getLogger(newclient.class.getName()).log(Level.SEVERE, null, ex);
        }

到目前为止你尝试了什么?不能同时在两个表中插入。您需要在
语句中运行两个不同的
INSERT。