【发布时间】:2021-02-01 17:33:52
【问题描述】:
我正在 SQL Server 中编写一个存储过程来更新患者轮班记录。为此,您必须验证数据库中是否存在dniPaciente。如果存在,则更新它,否则,它应该显示一条错误消息,指出未找到dniPaciente。
我已经尝试了以下方法,但是我无法抛出错误消息。
CREATE PROCEDURE sobreTurno(@dniDelPaciente VARCHAR(8) ,@nu evaFecha DATE,
@nuevaHoraInicio TIME,@nuevaHoraFin TIME)
AS
BEGIN TRY
IF EXISTS (SELECT dniPaciente FROM Turno WHERE dniPaciente=@dniDelPaciente)
UPDATE Turno
SET [fecha]=@nuevaFecha,
[horaInicio]=@nuevaHoraInicio,
[horaFin]=@nuevaHoraFin
WHERE dniPaciente=@dniDelPaciente
END TRY
BEGIN CATCH
PRINT('¡dniPaciente not found in the DATABASE!')
END CATCH
SQL Server 抛出的错误应该显示在 Java 的 catch 子句中。
try {
CallableStatement sobreTurno = conexionBBDD.getConexionBBDD().prepareCall("{call sobreTurno(?,?,?,?)}");
sobreTurno.setString(1, ventanaAsignacionSobreTurno.getDniPaciente());
sobreTurno.setDate(2, new Date(ventanaAsignacionSobreTurno.getDateChooser().getTime()));
sobreTurno.setTime(3, this.horaInicio);
sobreTurno.setTime(4, this.horaFin);
sobreTurno.execute();
} catch (Exception exeptionBBDD) {
//here I need to show the error message thrown from SQL SERVER
}
【问题讨论】:
-
对我来说,您似乎混淆了条件:“如果存在,则更新它”,但在代码中如果不存在则更新
-
这是真的,你是对的。我已经更改了它,但它仍然无法向我抛出错误。
-
我猜,你可以尝试使用RAISEERROR-功能docs.microsoft.com/en-us/sql/t-sql/language-elements/…
-
你没有抛出错误?你在打印吗?要抛出它,请使用关键字
throw(而不是 print)。 -
您正在吃掉您的程序中的错误 - 您的应用程序无法知道发生了什么。你可以重新抛出错误。但是您的程序包含一个更新语句 - 那么您为什么要抓住它呢?为什么您的 udpate 需要在 try/catch 块中?想想你的代码做了什么——如果它不适用,不要盲目地遵循一个模式。
标签: java sql-server sql-update try-catch