我正在使用官方Sybase JDBC驱动程序连接到数据库,并通过创建CallableStatement来调用存储过程,将参数绑定到它并调用.execute()。为什么Sybase JDBC驱动程序“吃”了异常?
然而,我发现没有异常被抛出,即使存储过程失败。我可以通过使用Wireshark嗅探到数据库的流量并观察返回的错误消息来验证失败是否传播回给我。
最后我发现,使用.executeUpdate()而不是.execute()不给我例外,但是我还有两个问题:
- 为什么.execute()和.executeUpdate ()有不同的表现?从接口的Sun文档似乎他们应该做的(几乎)同样的事情...
- 是否总是与适当向.executeUpdate替换.execute()()调用存储过程的时候?存储过程是否必须符合某些特定的要求才能使用.executeUpdate()进行调用? (例如,必须将它有一个更新/删除/插入语句作为最后一步?)
更新:我试过JTDS,并正确的行为(如:它会抛出SQLException的两个病例 - 与.execute()和.executeUpdate())。但是,由于我无法控制的限制,切换驱动程序并不是真的可能。
另外:我没有兴趣在此存储过程返回的结果,它是一个插入/更新类型的程序。如果失败或者失败,我只能插入以查看(并能够捕获/记录)。我试过的另一件事是在.execute()之后从连接中获取警告,但它也不包含任何内容。
其他司机的行为是否相同?那么jTDS呢? http://jtds.sourceforge.net/ – 2009-04-16 06:55:56