当前位置:天才代写 > tutorial > JAVA 教程 > JDBC毗连数据库之十大能力

JDBC毗连数据库之十大能力

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:326

Java数据库毗连(JDBC)API是一系列可以或许让Java编程人员会见数据库的接口,各个开拓商的接口并不完全沟通。在利用多年的Oracle公司的JDBC后,我积聚了很多能力,这些能力可以或许使我们更好地发挥系统的机能和实现更多的成果。

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);
...牐爌stmt.executeUpdate();牐爙

挪用setExecuteBatch()时指定的值是一个上限,当到达该值时,就会自动地激发SQL呼吁执行,尺度的executeUpdate()要领就会被作为批处理惩罚送到数据库中。我们可以通过挪用PreparedStatement类的sendBatch()要领随时传输批处理惩罚任务。

7、利用Oracle locator要领插入、更新大工具(LOB)

#p#分页标题#e#

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的成果。

 

    关键字:

天才代写-代写联系方式