gpt4 book ai didi

java - 在jsp中捕获SQL Raiserror

转载 作者:行者123 更新时间:2023-12-01 11:34:10 28 4
gpt4 key购买 nike

我正在开发一个数据库和一些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/

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