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

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

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

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

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

conn.setAutoCommit(false);

  得注意的是,一旦关闭了自提交功能,我就需要通过调Connectioncommit()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型的,然后出基于Oracleto_date()函数的字符串表达式。

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

  在使用PreparedStatementSQL命令,命令被数据库进行解析和编译,然后被放到命令冲区。然后,行同一个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()方法就会被作理送到数据中。我可以通过调PreparedStatementsendBatch()方法随时传输理任

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

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

8
、使用SQL92用存储过

  在储过,我可以使用SQL92Oracle 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的功能 

posted @ 2008-01-30 17:39  新技术  阅读(195)  评论(0编辑  收藏  举报