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

标签 java jdbc sybase sqlexception

我正在使用官方 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/

相关文章:

java - 使用java隐藏文件

mysql - 使用 Node.js 中的 jdbc 连接到 mysql

java - 过滤 mysql 数据以在 JTable 中显示时参数索引超出范围

mysql - 在 Sybase ASE(或使用 Sed)中格式化 bcp 输出文件中的日期时间字段

java - JSON解析错误: null; nested exception is com. alibaba.fastjson.JSONException

java - 按项目名称长度对列表进行排序的最佳方法

postgresql - JDBC postgres 真空超时

java - 使用 MyBatis Sql 查询在 Spring Boot 应用程序中选择别名列

java - 从 SQL DDL 语句创建 Java 对象

java - 包 net.java.stun4j 不存在