快速业务通道

如何测定JDBC的性能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

如何测定JDBC的性能

时间:2010-12-18

Java数据库连接(JDBC)被广泛用在Java应用程序中。在本篇文章中,我们将讨论如何测定JDBC的性能,如何判断JDBC子系统中的哪一部分需要进行优化。

核心的java.sql界面

我们的目的是提高应用程序的性能。一般情况下,我们需要对应用程序进行分析,找出其中的瓶颈。当然了,要对分布式应用程序进行有效的分析是比较困难的,I/O是分析的一个重点,这是由分布式应用程序的特点决定的,分布式应用程序中的线程需要花费大量的时间等待I/O操作。目前还不清楚线程因等待读、写操作而阻塞是瓶颈的一部分呢还是一个无关紧要的小问题。在进行分析时,有一个独立的通信系统测试标准是重要的。那么在测试JDBC子系统的性能时,我们应当测试哪些指标呢?

在java.sql软件包中,有三个接口组成了JDBC的核心:Connection、Statement和ResultSet。与数据库的正常交互包括下面的几部分:

·从数据库驱动程序中获得一个Connection对象。

·从Connection对象中获取能够执行指定的SQL语句的Statement对象

·如果SQL语句需要从数据库中读取数据,则使用Statement对象获取一个提供对数据库中的数据进行访问的ResultSet对象。

下面的例子通过访问指定数据库表的每行记录的所有域、将每行的数据存储到String []、并将所有的行放到一个向量中,演示了标准的数据库交互过程。

public static Vector getATable(String tablename, Connection Connection) throws SQLException { String sqlQuery = "SELECT * FROM " + tablename; Statement statement = Connection.createStatement(); ResultSet resultSet = statement.executeQuery(sqlQuery); int numColumns = resultSet.getMetaData().getColumnCount(); String[] aRow; Vector allRows = new Vector(); while(resultSet.next()) { aRow = new String[numColumns]; for (int i = 0; i < numColumns; i++) file://ResultSet的访问是从1开始的,数组是从0开始的。 aRow[i] = resultSet.getString(i+1); allRows.addElement(aRow); } return allRows; }

在java.sql或其他的SDK中没有Connection、Statement和ResultSet这三个对象的具体实现,这些对象以及其他的JDBC接口都是由数据库驱动程序的厂商开发的,并被作为数据库驱动程序的一部分包括在驱动程序软件包中。如果要打印出Connection对象或使用的其他对象的类名,可能会看到类似XXXConnection、XXXStatement、XXXConnectionImpl、XXXStatementImpl等字符串,其中的XXX就是正在使用的数据库的名字,例如Oracle。

如果我们要测试例子中getATable()方法的JDBC的性能,可以简单地在该方法的开始处和末尾处添加System.currentTimeMillis(),二者之间的时间差就是getATable()方法执行所使用的时间。只要数据库的交互过程与其他过程没有搅和在一起,就可以使用这种方法测试一个方法的JDBC性能。但通常情况下,Java应用程序的的数据库交互过程分布在许多类的许多方法中,而且很难将数据库交互过程单独分离出来。那么在这种情况下我们应该如何测试数据库交互过程的性能呢?

一个理想的方法是在所有的JDBC类中都内置测量性能的能力,然后可以在需要对其性能进行监测时简单地打开监测功能就可以了。正常情况下,JDBC类没有提供这种能力,但我们可以使用具备这种功能的类来替换它们,我们替换类的目标是提供与Proxy非常相似的对象。

使用一个接口的专用封装对象封装该接口的对象是一种有多种用途的成熟技术,collection类同步的封装对象就是最著名的一个例子,但还有其他许多用途。SDK中甚至有一个专门在运行时才生成封装对象的类:java.lang.reflect.Proxy类。封装对象也被称作代

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号