我正在Swing中制作一个桌面应用程序。问题是这样的:
我有两张桌子 - suppliers
和 items
.
supplier supplierid(PK,AI),name,address,telephone
item itemid(PK,AI),supplier_supplierID(FK),name
问题:
- 如何同时插入
supplier
表和item
表?items
中的外键是自己添加的还是必须显式添加的? - 如何仅添加特定供应商的项目?我正在考虑一些列表,下拉菜单来选择供应商 ->获得他的PK并插入到项目表中。
我正在使用Netbeans,MySQL
谢谢!
这取决于您尝试访问数据库的方式。使用像Hibernate和类似的ORM将为您完成大部分工作,因为它正在处理实体之间的依赖关系。
如果您使用普通 JDBC 访问数据库,则应按正确的顺序手动插入"行"。因此,您应该先插入供应商,然后再插入相关项目。如果供应商已存在,则应先获取其 id,并在保存物料时将该值作为supplier_supplierID传递。
但这一切都与春天无关!
您必须首先添加父行(供应商),然后再添加项目。 否则,您将收到错误。
添加供应商时,使用新supplier_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);
}