通过JDBC连接Oracle数据库中的十大技巧

 
  
1 、在客 开发 中使用 Thin 驱动 程序

  在 开发 Java 件方面, Oracle 的数据 提供了四 种类 型的 驱动 程序,二 用于 件、 applets servlets 等客 件,另外二 用于数据 中的 Java 储过 程等服 器端 件。在客 机端 件的 开发 中,我 可以 选择 OCI 驱动 程序或 Thin 驱动 程序。 OCI 驱动 程序利用 Java 本地化接口( JNI ),通 Oracle 件与数据 库进 行通 Thin 驱动 程序是 Java 驱动 程序,它直接与数据 库进 行通 得最高的性能, Oracle 在客 件的 开发 中使用 OCI 驱动 程序, 似乎是正确的。但我建 使用 Thin 驱动 程序,因 多次 测试发现 ,在通常情况下, Thin 驱动 程序的性能都超 OCI 驱动 程序。

2
关闭 提交功能,提高系 性能

  在第一次建立与数据 ,在缺省情况下, 接是在自 提交模式下的。 得更好的性能,可以通 过调 false 参数的 Connection setAutoCommit() 方法 关闭 提交功能,如下所示:

conn.setAutoCommit(false);

   得注意的是,一旦 关闭 了自 提交功能,我 就需要通 过调 Connection commit() rollback() 方法来人工的方式 务进 行管理。

3 、在 动态 SQL 或有 时间 限制的命令中使用 Statement

  在 SQL 命令 ,我 有二 种选择 :可以使用 PreparedStatement 象,也可以使用 Statement 象。无 多少次地使用同一个 SQL 命令, PreparedStatement 都只 它解析和 编译 一次。当使用 Statement 行一个 SQL 命令 ,都会 行解析和 编译 可能会使你 认为 ,使用 PreparedStatement 象比使用 Statement 象的速度更快。然而,我 行的 测试 表明,在客 件中,情况并非如此。 因此,在有 时间 限制的 SQL 操作中,除非成批地 SQL 命令,我 们应 当考 使用 Statement 象。

  此外,使用 Statement 象也使得 动态 SQL 命令更加 简单 ,因 可以将字符串 接在一起,建立一个有效的 SQL 命令。因此,我 认为 Statement 象可以使 动态 SQL 命令的 建和 得更加 简单

4
、利用 helper 函数 对动态 SQL 命令 行格式化

  在 建使用 Statement 行的 动态 SQL 命令 ,我 需要 理一些格式化方面的 问题 。例如,如果我 建一个将名字 O'Reilly 插入表中的 SQL 命令, 使用二个相 “''” 号替 O'Reilly 中的 “'” 号。完成 些工作的最好的方法是 建一个完成替 操作的 helper 方法,然后在 接字符串心服用公式表达一个 SQL 命令 ,使用 建的 helper 方法。 与此 似的是,我 可以 helper 方法接受一个 Date 型的 ,然后 出基于 Oracle to_date() 函数的字符串表达式。

5
、利用 PreparedStatement 象提高数据 体效率

  在使用 PreparedStatement SQL 命令 ,命令被数据 库进 行解析和 编译 ,然后被放到命令 冲区。然后, 行同一个 PreparedStatement ,它就会被再解析一次,但不会被再次 编译 。在 冲区中可以 发现预编译 的命令,并且可以重新使用。在有大量用 的企 业级应 件中, 常会重 复执 行相同的 SQL 命令,使用 PreparedStatement 来的 编译 次数的减少能 提高数据 体性能。如果不是在客 建、 预备 PreparedStatement 需要的 时间长 Statement ,我会建 在除 动态 SQL 命令之外的所有情况下使用 PreparedStatement 象。

6
、在成批 理重 的插入或更新操作中使用 PreparedStatement

  如果成批地 理插入和更新操作,就能 够显 著地减少它 所需要的 时间 Oracle 提供的 Statement CallableStatement 并不真正地支持批 理,只有 PreparedStatement 象才真正地支持批 理。我 可以使用 addBatch() executeBatch() 方法 选择标 准的 JDBC 理,或者通 利用 PreparedStatement 象的 setExecuteBatch() 方法和 准的 executeUpdate() 方法 选择 速度更快的 Oracle 有的方法。要使用 Oracle 有的批 理机制,可以以如下所示的方式 setExecuteBatch()


PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}


   setExecuteBatch() 指定的 是一个上限,当达到 该值时 ,就会自 地引 SQL 命令 行, 准的 executeUpdate() 方法就会被作 理送到数据 中。我 可以通 过调 PreparedStatement sendBatch() 方法随 时传输 理任

7
、使用 Oracle locator 方法插入、更新大 象( LOB

   Oracle PreparedStatement 不完全支持 BLOB CLOB 等大 象的 理,尤其是 Thin 驱动 程序不支持利 PreparedStatement 象的 setObject() setBinaryStream() 方法 BLOB ,也不支持利用 setCharacterStream() 方法 CLOB 。只有 locator 本身中的方法才能 从数据 LOB 型的 。可以使用 PreparedStatement 象插入或更新 LOB ,但需要使用 locator 才能 LOB 。由于存在 二个 问题 ,因此,我建 使用 locator 的方法来插入、更新或 LOB

8
、使用 SQL92 用存 储过

  在 储过 ,我 可以使用 SQL92 Oracle PL/SQL ,由于使用 Oracle PL/SQL 并没有什 么实际 的好 ,而且会 以后 维护 你的 用程序的 开发 员带 来麻 ,因此,我建 用存 储过 使用 SQL92

9
、使用 Object SQL 象模式 移到数据

  既然可以将 Oracle 的数据 面向 象的数据 来使用,就可以考 用程序中的面向 象模式 到数据 中。目前的方法是 Java bean 为伪 装的数据 库对 象,将它 的属性映射到 系表中,然后在 bean 中添加方法。尽管 这样 作在 Java 中没有什 么问题 ,但由于操作都是在数据 之外 行的,因此其他 访问 数据 件无法利用 象模式。如果利用 Oracle 的面向 象的技 ,可以通 过创 建一个新的数据 库对 型在数据 中模仿其数据和操作,然后使用 JPublisher 等工具生成自己的 Java bean 。如果使用 这种 方式,不但 Java 用程序可以使用 件的 象模式,其他需要共享你的 用中的数据和操作的 件也可以使用 件中的 象模式。

10
、利用 SQL 完成数据 内的操作

  我要向大家介 的最重要的 经验 是充分利用 SQL 的面向集合的方法来解决数据 库处 理需求,而不是使用 Java 程化的 言。

  如果 程人 要在一个表中 多行, 果中的 个行都会 找其他表中的数据,最后, 程人 员创 建了独立的 UPDATE 命令来成批地更新第一个表中的数据。与此 似的任 可以通 set 子句中使用多列子 查询 而在一个 UPDATE 命令中完成。当能 一的 SQL 命令中完成任 ,何必要 数据在网上流来流去的?我建 户认 真学 如何最大限度地 发挥 SQL 的功能 

你可能感兴趣的:(oracle数据库)