JDBC 驱动程序中的 Statement、PreparedStatement 和 CallableStatement 的 ExecuteUpdate 实现是否不同?

Does implementation of ExecuteUpdate is different for Statement,PreparedStatement and CallableStatement inside JDBC driver?

背景故事:

我观察到 Sybase JDBC 驱动程序 (jconn3) 在 Statement.ExecuteUpdate(sql). 上正在处理异常
SQL 语句是一个 Insert 语句,它将一行插入 table(这不是临时 table)但仍然 Statement.ExecuteUpdate(sql) returns 0 由于未知原因。 这个问题是随机的,似乎不会每次都发生。

我的理解是 Statement.ExecuteUpdate(sql) returns 0 如果没有行被更新。但是对于 Insert 语句的情况,我不确定如果没有插入任何内容,为什么不抛出异常。
由于代码是遗留的(JDK 1.4 正在使用)并且由于某些限制,我无法更改或更新 JDBC 驱动程序。


可能性:

我在考虑一个角度,如果 Driver 在 Statement、PreparedStatement 和 CallableStatement 方面具有不同的 ExecuteUpdate 内部实现,那么我可以建议将 Statement 更改为 CallableStatement 以调用 ExecuteUpdate。

我很想知道 Sybase JDBC 驱动程序中 Statement、PreparedStatement 和 CallableStatement 的 ExecuteUpdate 实现是否可能不同。

I am curious to know if the implementation of ExecuteUpdate is possibly different for Statement,PreparedStatement and CallableStatement in Sybase JDBC Driver.

.executeUpdate 的实现对于 StatementPreparedStatement 对象在 any JDBC 驱动程序中是不同的,因为这两个对象的工作方式不同。

一个Statement对象只是一个执行任意SQL语句的对象。当您使用 Connection#createStatement 创建对象时,未提供 SQL 语句,它作为参数传递给 Statement#executeUpdate 方法。

创建一个 PreparedStatement 对象需要我们在调用 Connection#prepareStatement 方法时提供 SQL 语句。 SQL 语句是 "pre-compiled" 并作为对象的一部分缓存。当执行语句时,我们只需要调用 PreparedStatement#executeUpdate 方法(不带参数),因为 SQL 代码已经 "prepared".

因为 Statement#executeUpdate 必须 给出一个论点而 PreparedStatement#executeUpdate 不能 给出一个论点,他们很清楚必须以不同方式实施。