gpt4 book ai didi

java - 为什么Sybase JDBC驱动 "eating"异常?

转载 作者:行者123 更新时间:2023-11-29 07:23:08 25 4
gpt4 key购买 nike

我正在使用官方 Sybase JDBC 驱动程序连接到数据库并通过创建 CallableStatement、将参数绑定(bind)到它并在其上调用 .execute() 来调用存储过程。

但是,我发现即使存储过程失败,也不会抛出任何异常。我可以通过使用 Wireshark 嗅探到数据库的流量并观察返回的错误消息来验证故障是否传播回了我。

最后我发现使用 .executeUpdate() 而不是 .execute() 确实给我异常(exception),但是我还有两个问题:

  1. 为什么 .execute() 和 .executeUpdate() 的行为不同?从接口(interface)的 SUN 文档看来,他们应该(几乎)做同样的事情......
  2. 在调用存储过程时用 .executeUpdate() 替换 .execute() 是否总是合适的?存储过程必须符合某些特定要求才能使用 .executeUpdate() 调用吗? (例如,它必须有更新/删除/插入语句作为最后一步吗?)

更新:我已经尝试过 jTDS,它的行为是正确的(如:它在两种情况下都抛出 SQLException - 使用 .execute() 和使用 .executeUpdate())。但是,由于我无法控制的限制,实际上不可能关闭驱动程序。

另外:我对这个存储过程返回的结果不感兴趣,它是一个插入/更新类型的过程。我只会被插入以查看(并能够捕获/记录)它是否失败。我尝试过的另一件事是在 .execute() 之后从连接中删除警告,但它也不包含任何内容。

最佳答案

因为那些Sybase的人都疯了,所以才会吃Exceptions!没有理由避免对准备好的/可调用的语句使用 executeUpdate() 。如果那是您必须使用它来使其工作的方法,那么请继续这样做。但是您应该向 Sybase 提交错误报告 - 驱动程序没有理由这样做。

关于java - 为什么Sybase JDBC驱动 "eating"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/755021/

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