`
tigers
  • 浏览: 33734 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PreparedStatement缺陷之执行顺序混乱

    博客分类:
  • J2EE
阅读更多

       PreparedStatement虽然有种种好处,最大的特点是SQL语句的数据库无关性,也就是不需要特定得指定具体数据库的SQL,比如比较Timestamp类型的字段,如果用Statement全拼SQL的话,必须得带上TIMESTAMP('YYYY-MM-DD 00:00:00.0') (DB2的) 或者TIMESTAMP('YYYY-MM-DD 00:00:00.0', 'YYYY-MM-DD hh24:mi:ssxff')(Oracle的)这些特定函数,但如果是PreparedStatement的话,就不需要指定了,完全交给JDBC驱动来完成。而且,有时候必须得用PreparedStatement,比如从一个库中读取N条记录再把该记录集插入到另一个库,这时候事先并不知道有多少条记录,甚至不知道有哪些字段,那么就只能用PreparedStatement来拼装了。

      但是,在批处理preparedStatement的命令的时候,由于每加入一条新的命令都是先发送到命令缓冲区,所以不管客户端是批处理还是逐条执行,数据库服务端都是某个时刻从命令缓冲区中取出命令执行,那么最后造成的后果是数据库中的记录顺序并不是客户端的执行顺序。比如,我在客户端首先从一个库读取200条记录,再插入到另一个库,最后两个库中的记录顺序不一致。这样就会引出一个问题,如果要对两边的纪录作CRC校验的话,那么不能直接逐条对比,还得先排序,然后才能对比——增加了校验的复杂度。

分享到:
评论

相关推荐

    如何获得PreparedStatement最终执行的sql语句

    这篇博客可能是探讨如何在实际运行中获取`PreparedStatement`最终执行的SQL语句,这对于调试和分析数据库操作非常有帮助。 在Java中,`PreparedStatement`对象通常会接收参数占位符(如`?`),然后在执行前填充具体...

    PreparedStatement

    jdbc2.0版 PreparedStatement接口的用法

    JDBC基础教程之PreparedStatement.doc

    ### JDBC基础教程之PreparedStatement知识点详解 #### 一、概述 `PreparedStatement`是Java数据库连接(JDBC)API中的一种重要接口,它继承自`Statement`接口,并在其基础上进行了扩展和优化。`PreparedStatement`...

    Statement和PreparedStatement之间的区别

    首先, Statement对象执行的SQL语句是直接编译的,而PreparedStatement对象执行的SQL语句则是预编译的。预编译语句在执行之前已经被数据库编译器编译过,生成了执行代码,而Statement对象则需要在每次执行时重新编译...

    PreparedStatement详细用法

    - **预编译机制**:`PreparedStatement`允许将SQL语句预编译并存储在数据库端,这意味着当相同的SQL语句多次执行时,数据库只需解析一次,从而提高了执行效率。 - **参数绑定**:通过使用问号占位符(`?`)来表示...

    PreparedStatement 详细用法

    3. **批量更新**:`PreparedStatement`支持批量执行SQL更新语句,可以减少网络开销和提高执行效率。 #### 四、详细解析 1. **创建PreparedStatement对象**: - 使用`Connection.prepareStatement(String sql)`...

    PreparedStatement和Statement

    在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...

    connection 和 preparedstatement 的关闭问题

    - **PreparedStatement**:用于执行预编译的SQL语句。它比`Statement`更高效,因为预编译后的SQL语句只需编译一次,之后多次执行时无需再次编译,特别适合参数化查询和批量操作。 #### 何时使用 Statement? - 当...

    PreparedStatement 向数据库插入时间方法

    为了确保SQL查询的安全性和效率,通常会使用`PreparedStatement`来执行这样的操作。然而,在处理日期和时间类型的数据时,可能会遇到一些问题。例如,当我们尝试使用`java.util.Date`对象将日期传递给`...

    练习3:使用PreparedStatement插入宠物信息.zip

    4. **执行插入操作**:调用PreparedStatement的`executeUpdate()`方法执行SQL语句,该方法返回受影响的行数。在插入操作中,通常是1(如果插入成功)或0(如果表中已有相同的主键,导致插入失败)。 ```java int ...

    关于PreparedStatement插入Date类型值的方法.txt

    在Java编程语言中,使用`PreparedStatement`来执行SQL语句是一种常见的操作数据库的方式。这种方式不仅可以提高程序的性能,还可以有效地防止SQL注入攻击。当我们在应用程序中需要向数据库中插入日期(`Date`类型)...

    java中PreparedStatement和Statement的区别

    Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 PreparedStatement 语句可以提高数据库访问的效率。这是...

    PreparedStatement接口

    NULL 博文链接:https://chaoyi.iteye.com/blog/2088080

    【性能】JDBC PreparedStatement和连接池PreparedStatement Cache学习记录

    1. **性能优化**:`PreparedStatement`的SQL语句在首次执行时会被数据库预编译,后续的执行只需传入参数即可,避免了每次执行SQL时的解析过程,从而提高了执行速度。 2. **防止SQL注入**:通过设置参数,可以防止...

    JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法

    JDBC 中的 PreparedStatement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。这些方法的使用取决于 SQL 语句所产生的内容。 _executeQuery 方法_ executeQuery 方法用于产生单个...

    MySql练习3:使用PreparedStatement插入宠物信息.zip

    MySql练习3:使用PreparedStatement插入宠物信息.zip MySql练习3:使用PreparedStatement插入宠物信息.zip MySql练习3:使用PreparedStatement插入宠物信息.zip

    JSP中的PreparedStatement对象操作数据库的使用教程

    为了高效且安全地与数据库进行交互,Java提供了一套成熟的API,其中PreparedStatement对象便是核心组件之一。PreparedStatement继承自Statement接口,但它对数据库操作进行了更高级的封装,提供了预编译语句的能力。...

    java执行SQL语句实现查询的通用方法详解

    PreparedStatement是Java执行SQL语句实现查询的关键对象,该对象提供了执行SQL语句的方法。PreparedStatement对象可以重用,减少了SQL语句的解析时间。 在executeQuery()方法中,使用PreparedStatement来执行SQL...

    Java数据库连接PreparedStatement的使用详解

    Java 数据库连接 PreparedStatement 是 Java 语言中连接数据库的重要组件之一。通过使用 PreparedStatement,可以实现对数据库的 CRUD(Create, Read, Update, Delete)操作。下面将详细介绍 PreparedStatement 的...

Global site tag (gtag.js) - Google Analytics