<b>JDBC衔接数据库之十大本领</b>[Java编程]
本文“<b>JDBC衔接数据库之十大本领</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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);
...??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的功效.
以上是“<b>JDBC衔接数据库之十大本领</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |