当前位置: 首页 > 知识库问答 >
问题:

ExecuteUpdate的实现对于JDBC驱动程序中的Statement、PreparedStatement和CallableStatement有什么不同吗?

陶成化
2023-03-14

背景故事:

我注意到Sybase JDBC驱动程序(JCON3)正在吃statement.executeUpdate(sql)上的异常
sql语句是一个Insert语句,它将一行插入到表(这不是临时表)中,但statement.executeUpdate(sql)由于未知原因仍然返回0。这个问题是随机的,并不是每次都发生。

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


可能性:

我从一个角度考虑了一下,如果驱动程序对于Statement、PreparedStatement和CallableStatement有不同的ExecuteUpdate的内部实现,那么我可以建议将Statement更改为CallableStatement来调用ExecuteUpdate。

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

共有1个答案

康弘义
2023-03-14

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

对于任何JDBC驱动程序中的statementpreparedstatement对象,.executeupdate的实现都是不同的,因为这两个对象的工作方式不同。

statement对象只是执行任意SQL语句的对象。使用Connection#CreateStatement创建对象时不提供SQL语句,它作为参数传递给语句#ExecuteUpdate方法。

创建PreparedStatement对象需要在调用Connection#PreparedStatement方法时提供SQL语句。SQL语句是“预编译”的,并作为对象的一部分进行缓存。当执行语句的时候,我们只需要调用PreparedStatement#executeUpdate方法(不带参数),因为SQL代码已经“准备好”了。

由于必须为语句#executeupdate提供一个参数,而不能为PreparedStatement#executeupdate提供一个参数,因此它们的实现显然必须有所不同。

 类似资料:
  • 主要内容:1. Statement对象,2. PreparedStatement对象,3. CallableStatement对象,关闭CallableStatement对象当获得了与数据库的连接后,就可以与数据库进行交互了。 JDBC ,和接口定义了可用于发送SQL或PL/SQL命令,并从数据库接收数据的方法和属性。 它们还定义了有助于在Java和SQL数据类型的数据类型差异转换的方法。 下表提供了每个接口定义,以及使用这些接口的目的的总结。 接口 推荐使用 用于对数据库进行通用访问,在运行时

  • 问题内容: 我想知道有什么区别,何时使用,和。 每种方法的最佳实践和典型方案是什么? 问题答案: 声明与PreparedStatement 使用PreparedStatement可以提高性能,但它取决于数据库。 使用PreparedStatement可以避免SQL注入。PreparedStatement如何避免或阻止SQL注入? 使用setInt,setString和prepareStatemen

  • SQLException:不能使用executeQuery()发出数据操作语句。在com.mysql.jdbc.sqlerror.createsQlException(sqlerror.java:1078)在com.mysql.jdbc.sqlerror.createsQlException(sqlerror.java:989)在com.mysql.jdbc.sqlerror.createsQlE

  • 问题内容: MySQL JDBC驱动程序将这两个属性定义为: useServerPrepStmts-如果服务器支持的话,使用服务器端准备好的语句? cachePrepStmts- 驱动程序是否应该缓存客户端准备好的语句的PreparedStatements的解析阶段,是否适合服务器端准备好的语句和服务器端准备好的语句本身的“检查”? 客户端准备好的语句是否可以重用对象? 如果启用,则由于MySQL

  • 我不知道Spark驱动程序和应用程序主程序之间有什么区别。基本上是在运行一个应用程序中的职责,谁做什么? 在客户端模式下,客户端机器拥有驱动程序,应用程序主程序运行在集群节点中。在集群模式下,客户端没有任何驱动程序,驱动程序和应用程序主程序运行在同一个节点(集群节点之一)。 参考资料: 火花驱动程序内存和应用程序主内存 火花纱集群vs客户端-如何选择使用哪一个?

  • 问题内容: 我有一个包含用户信息的数据库,我想创建一个公共静态变量,以便在任何给定时间返回数据库整数,而不必为每个整数都做一个空,但这给了我这个错误: 这是我的代码: 有人知道我在做什么错吗?我尝试使用Google的东西,但是更改代码将我从一个错误转移到了另一个错误…因此,我现在还不确定。 我正在运行JDBC驱动程序sqlite-jdbc-3.8.11.2.jar 问题答案: 未实现。我想你只是想