在jdbc中的单个事务中将数据插入多个表中

Posted

技术标签:

【中文标题】在jdbc中的单个事务中将数据插入多个表中【英文标题】:Insert data into multiple tables in single transaction in jdbc 【发布时间】:2014-04-22 05:52:02 【问题描述】:

我有一个表 Order 有字段 Orderid|status|cid|

还有另一张桌子 Order_Details

Oder_details_id|Order_id|商品编号

我想在单个事务中在两个表中插入值,例如如果客户下订单,则应该生成订单 ID,并且应该将 order_id 插入到 Order 和 Order_Details 表中。 但是我如何在 JDBC 中做呢?

【问题讨论】:

到目前为止你尝试过什么?您能否发布一些代码并显示未按预期工作的内容? 我浏览了一些代码,上面写着要么使用事务,要么使用存储过程。就像首先(惰性订单 id 到订单表中)然后(从订单表中选择 orderi_d 其中 date="" 和 itemid="" )并将 order_id 插入到 order_details 表中 【参考方案1】:

您可以将自动提交设置为false

dbConnection.setAutoCommit(false); // to start a transaction block.

// do your two inserts here

dbConnection.commit(); // to end a transaction block.

查看完整示例:JDBC Transaction example

【讨论】:

它是否能够在 Order_Table 中选择作为主键和自动增量的 Order_Id 并将此 Order_Id 插入到 Orderdetails 表中。在 OrderDetails 表中,它是外键 @Ashot Karakhanyan @user2210442,您可以先插入Order,然后再插入OrderDetails。当您插入Order 时,您可以检索生成的id (PK),如下所示:PreparedStatement ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS。插入后得到它如下:int generatedId; try (ResultSet rs = ps.getGeneratedKeys()) if (rs.next()) generatedId = rs.getInt(1); 然后你可以在插入OrderDatails时将该id用作FK。 Karakhanayan 谢谢先生,但还有一件事所以它会返回刚刚生成的 Order_Id(primary key) 还是返回所有以前的 Order_Id(primary key ) 第一种情况,刚刚生成了PK-s。 你能解释一下吗..第一种情况

以上是关于在jdbc中的单个事务中将数据插入多个表中的主要内容,如果未能解决你的问题,请参考以下文章

如何从单个控制器将数据插入到 laravel 中的多个表中?

JDBC应用中的事务管理

SQL 从包含表名、列名和值列映射的数据表中将数据插入到多个表中,可以在源中更改

是否可以在单个查询中将 x 个默认值插入到空 SQLite 表中?

在oracle存储过程中将数据插入到多个表中

多进程写入的事务封装