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

标签 java sql-server sql-server-2008 tsql prepared-statement

我有一个 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/

相关文章:

c# - 插入、更新错误: Subquery returned more than 1 row in C#

c# - 如何准确地将 sql 脚本插入到 Sql Server 表中

java - 如何覆盖 JFrame 关闭 ('x' ) 按钮的默认监听器?

java - 服务器端缓存

java - 在此用例中使用反射来解决我不允许修复的设计问题是否合理?

asp.net - SQL Server 2008 Express - 示例数据库下载?

sql - 获取 2 个不同字符串之间的字符串的一部分

java - Spring Boot YARN 不运行在 Hadoop 2.8.0 客户端无法访问 DataNode

sql - 根据其他查询的结果运行 Select 查询

sql-server - 有什么方法可以让我从现有的数据库生成 SQL 脚本吗?