【问题标题】:Insert data into multiple tables in single transaction in jdbc在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 表中

标签: sql servlets jdbc


【解决方案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。
  • 你能解释一下吗..第一种情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 2012-11-20
  • 2020-09-26
相关资源
最近更新 更多