通过JDBC驱动程序从SQL过程到Java的信息/警告消息

通过JDBC驱动程序从SQL过程到Java的信息/警告消息,java,sql,jdbc,Java,Sql,Jdbc,通过查看该方法,必须有某种方法将警告/信息消息从存储过程传递到Java层,但发现大多数驱动程序都没有实现该方法。是否有任何方法可以将信息/警告消息从存储过程发送到Java层?调用存储过程时,您是否已经尝试过使用。我认为这是应该做的。可能支持getWarnings() CallableStatement cs = Connection.prepareCall(..) cs.registerOutParameter(..) cs.setXXX .... cs.executeUpdate() cs.g

通过查看该方法,必须有某种方法将警告/信息消息从存储过程传递到Java层,但发现大多数驱动程序都没有实现该方法。是否有任何方法可以将信息/警告消息从存储过程发送到Java层?

调用存储过程时,您是否已经尝试过使用。我认为这是应该做的。可能支持
getWarnings()

CallableStatement cs = Connection.prepareCall(..)
cs.registerOutParameter(..)
cs.setXXX
....
cs.executeUpdate()
cs.getXXX()
cs.getWarnings()
调用存储过程时是否已尝试使用。我认为这是应该做的。可能支持
getWarnings()

CallableStatement cs = Connection.prepareCall(..)
cs.registerOutParameter(..)
cs.setXXX
....
cs.executeUpdate()
cs.getXXX()
cs.getWarnings()

这将取决于特定的服务器。在MSSQL中,您将使用RAISERROR。我认为仅仅隐藏在get警告中或抛出SQLException(您总是可以捕获并解析其消息)的行为将取决于级别


但支持的条件和方式因数据库供应商而异,因此您应该针对您感兴趣的特定数据库提出问题。

这取决于特定的服务器。在MSSQL中,您将使用RAISERROR。我认为仅仅隐藏在get警告中或抛出SQLException(您总是可以捕获并解析其消息)的行为将取决于级别


但是,支持它的条件和方式因数据库供应商而异,因此您应该针对您感兴趣的特定数据库提出问题。

我猜想,警告/信息消息指的是存储过程本身生成的文本字符串。我建议在存储过程中添加out参数,并使用它返回消息/警告。如果您的存储过程是在Oracle上用Java编写的,那么您甚至可以序列化消息列表,在JDBC接口上将其作为blob返回,并在客户机Java代码中重新构建它。几年前,我在一个大型系统中这样做了,它运行得非常好。

我认为警告/信息消息是指存储过程本身生成的文本字符串。我建议在存储过程中添加out参数,并使用它返回消息/警告。如果您的存储过程是在Oracle上用Java编写的,那么您甚至可以序列化消息列表,在JDBC接口上将其作为blob返回,并在客户机Java代码中重新构建它。几年前,我在一个大型系统中完成了这项工作,它运行得非常好。

我们已经编写了许多存储过程,现在很难更改这些存储过程。除了参数注册外,还有其他方法将消息从Oracle存储过程传递到Java层吗?存储过程当前生成的警告/信息消息是如何生成的?目前我们使用raise_error和一些SQL代码来区分错误和警告。但这并不是在所有情况下都能很好地工作,因此我正在寻找一种替代方法。我们已经编写了很多存储过程,现在很难更改它们。除了参数注册外,还有其他方法将消息从Oracle存储过程传递到Java层吗?存储过程当前生成的警告/信息消息是如何生成的?目前我们使用raise_error和一些SQL代码来区分错误和警告。但这并不是在所有情况下都有效,因此我正在寻找一种替代方法。