Java 我想在地址表(子表)中插入员工id—一对多概念
我正在使用Java 我想在地址表(子表)中插入员工id—一对多概念,java,mysql,sql,database,Java,Mysql,Sql,Database,我正在使用javajdbc连接 我的问题很简单,我将employee记录插入到employee表中 例: 如何获取子表(address)的外键并将其插入 如果我使用从employee中选择max(emp_id)并将id插入子表中 我担心如果不止一个人尝试在employee表中插入值,那么我可能会为子表获取错误的employee id。 是否有任何可能的方法在子表中插入员工id 注意:我需要一个sql查询,了解如何在子表中插入员工id如果将记录插入到包含自动增量列的表中,则可以通过调用mysql\
javajdbc连接
我的问题很简单,我将employee记录插入到employee表中
例:
如何获取子表(address
)的外键并将其插入
如果我使用从employee
中选择max(emp_id)并将id插入子表中
我担心如果不止一个人尝试在employee表中插入值,那么我可能会为子表获取错误的employee id。
是否有任何可能的方法在子表中插入员工id
注意:我需要一个sql查询,了解如何在子表中插入员工id如果将记录插入到包含自动增量列的表中,则可以通过调用mysql\u insert\u id()函数获取存储在该列中的值 更多详情请参阅此链接
你需要做几件事 假设,
employee
中的主键不是名为emp\u id
的自动递增键,而是插入类似Insert-into-employee(emp\u id,emp\u name)的值(10,'hello')代码>完成:外键为10
但是:如果它确实是自动增量,则不能为其指定任何值:
插入员工(emp_name)值(“Veronica”)代码>
然后,您可以通过驱动程序或后续SQL语句检索最后生成的emp\u id
值。在JAVA中,您需要告诉驱动程序,您希望返回最后生成的ID:
PreparedStatement pst = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
然后您可以获取生成的主键:
ResultSet rset = pst.getGeneratedKeys();
Long emp_id;
if (rset.next()) {
emp_id = rset.getLong(1);
}
现在Long emp\u id
包含要插入地址表的外键。对于子表示例:插入地址(外键\u员工\u id、门号、街道名称);是的,我只需要自动增量OP想要JAVA,而不是PHP?问题被标记为JAVA
,因此OP想要JAVA代码而不是PHP函数mysql\u insert\u id()
不是任何JAVA“函数”(因为JAVA中根本没有函数)。手册中的链接示例显示了一个C
代码片段。您的回答非常有用,因此在这种情况下,即使多个用户尝试插入记录,也不会获取错误的员工id,对吗?是的。驱动程序确保从单个实例的角度来看这是原子的。
ResultSet rset = pst.getGeneratedKeys();
Long emp_id;
if (rset.next()) {
emp_id = rset.getLong(1);
}