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
的实现对于 Statement
和 PreparedStatement
对象在 any JDBC 驱动程序中是不同的,因为这两个对象的工作方式不同。
一个Statement
对象只是一个执行任意SQL语句的对象。当您使用 Connection#createStatement
创建对象时,未提供 SQL 语句,它作为参数传递给 Statement#executeUpdate
方法。
创建一个 PreparedStatement
对象需要我们在调用 Connection#prepareStatement
方法时提供 SQL 语句。 SQL 语句是 "pre-compiled" 并作为对象的一部分缓存。当执行语句时,我们只需要调用 PreparedStatement#executeUpdate
方法(不带参数),因为 SQL 代码已经 "prepared".
因为 Statement#executeUpdate
必须 给出一个论点而 PreparedStatement#executeUpdate
不能 给出一个论点,他们很清楚必须以不同方式实施。
背景故事:
我观察到 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
的实现对于 Statement
和 PreparedStatement
对象在 any JDBC 驱动程序中是不同的,因为这两个对象的工作方式不同。
一个Statement
对象只是一个执行任意SQL语句的对象。当您使用 Connection#createStatement
创建对象时,未提供 SQL 语句,它作为参数传递给 Statement#executeUpdate
方法。
创建一个 PreparedStatement
对象需要我们在调用 Connection#prepareStatement
方法时提供 SQL 语句。 SQL 语句是 "pre-compiled" 并作为对象的一部分缓存。当执行语句时,我们只需要调用 PreparedStatement#executeUpdate
方法(不带参数),因为 SQL 代码已经 "prepared".
因为 Statement#executeUpdate
必须 给出一个论点而 PreparedStatement#executeUpdate
不能 给出一个论点,他们很清楚必须以不同方式实施。