gpt4 book ai didi

java - 当确认更新行时,为什么我的PreparedStatement.executeUpdate 返回 0?

转载 作者:行者123 更新时间:2023-12-01 06:11:02 24 4
gpt4 key购买 nike

我有一个 TSQL-preparedStatement,用于根据 ID 更新表中的单个寄存器。该寄存器还可能具有与多对多关系的连接,应更新该关系。换句话说,应该添加新的关系,并且可能需要删除一些关系。

这里是伪代码(最后是完整的 SQL 代码):

  • 开始交易
  • 更新预订,设置值,其中 bookingID = X
  • 从 BookingHasSeat 中删除,其中 bookingID = X 且 SeatID 不在 [整数列表] 中接下来的行对列表中的每个 int id (Y) 重复
  • 如果 X、Y 尚不存在,请将 X、Y 插入 BookingHasSeat。
  • 提交交易

SQL 工作得很好,但是当我将语句构建为 java.sql.Connection.prepareStatement 并调用 .executeUpdate() 方法时,我想存储返回的整数值,以确保至少一行已更新。如果没有更新任何行,则意味着更新不成功,并且我向用户应用程序界面报告失败。

如果席位列表保持不变,则此 TSQL 特别会返回失败。即使预订登记详细信息已更新。如果预订已更新,我希望它返回 1,只有当什么都没有发生时才返回 0。

返回的行数在 TSQL 中如何工作? java方法与TSQL不兼容吗?我如何确保已发生更新?

SET XACT_ABORT ON 
BEGIN TRANSACTION
DECLARE @BookingID INT = 33;
UPDATE Booking SET DateTime=6543546, PersonID=4, Comment='', Confirmed='true', StartDate=43265436534, EndDate=-1, StartSession=720, EndSession=900 WHERE BookingID = @BookingID;
DELETE FROM BookingHasSeat WHERE BookingID = @BookingID AND SeatID NOT IN (1,2,3,4,5,6);
DECLARE @SeatID1 INT = 1;
IF @SeatID1 NOT IN (SELECT SeatID FROM BookingHasWorkStation WHERE BookingID = @BookingID)
BEGIN
INSERT INTO BookingHasSeat (BookingID, SeatID) VALUES (@BookingID, @SeatID1);
END
DECLARE @SeatID2 INT = 2;
IF @SeatID2 NOT IN (SELECT SeatID FROM BookingHasWorkStation WHERE BookingID = @BookingID)
BEGIN
INSERT INTO BookingHasWorkStation (BookingID, SeatID) VALUES (@BookingID, @SeatID2);
END
DECLARE @SeatID3 INT = 3;
IF @SeatID3 NOT IN (SELECT SeatID FROM BookingHasWorkStation WHERE BookingID = @BookingID)
BEGIN
INSERT INTO BookingHasWorkStation (BookingID, SeatID) VALUES (@BookingID, @SeatID3);
END
COMMIT TRANSACTION

最佳答案

当使用 JDBC 调用存储过程时,应该使用 CallableStatement。

关于java - 当确认更新行时,为什么我的PreparedStatement.executeUpdate 返回 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34511173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com