我正在开发一个数据库和一些JSP页面来对其执行CRUD操作。
我无法在 JSP 代码中捕获与 SQL 代码相关的异常。
例如:
我在这部分代码中在 T-SQL 中引发了错误:
IF @existing > 0
BEGIN
RAISERROR ('ID primário ja existe', 1, 1)
RETURN 0
END
IF (@CategoriaId IS NULL)
BEGIN
RAISERROR('O CategoriaId não pode ser nulo',1,1)
RETURN 0
END
我需要调用在 JSP 代码中引发这些错误的函数。
这是 JSP 代码的一部分:
try
{
rs = stmt.executeQuery(sql);
}
catch (Exception u)
{
out.println(u.toString());
}
并且它永远不会从 T-SQL 返回错误。
但是我知道该函数到达了 catch 语句,因为如果我在那里抛出一个 println("test") ,它会在 jsp 页面上写入 test 。
我总是收到此异常:>com.microsoft.sqlserver.jdbc.SQLServerException:该语句未返回结果集。
这是我正在执行的插入操作,如果我写入正确的值,它将毫无问题地插入。但即使它插入它也会抛出该异常。
编辑:我已经尝试过 u.getMessage()
最佳答案
您确实应该阅读收到的异常消息。
您没有从数据库获得异常的原因可能是因为它被从 java 获得的异常掩盖了。
我自己就是一个 .net 人,我上次使用 java 大约是 17 年前,所以我不熟悉应该使用的正确方法,但它可能不是 executeQuery
.
According to this post ,您应该使用 execute
来代替。
更新
在我们在评论中交谈之后,我进行了一些挖掘并发现 this pearl in MSDN.
注意这部分:
A RAISERROR severity of 11 to 19 executed in the TRY block of a TRY…CATCH construct causes control to transfer to the associated CATCH block. Specify a severity of 10 or lower to return messages using RAISERROR without invoking a CATCH block.
这意味着您的 raiseerror
的严重性参数应该在 11 到 19 的范围内。
关于java - 在jsp中捕获SQL Raiserror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167527/