若何测定JDBC的性能[Java编程]
本文“若何测定JDBC的性能[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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类.封装对象也被称作代理对象,假如在本篇文章中利用代理对象这个术语,会使对封装JDBC对象的注释更复杂,因此,在本篇文章中仍旧会保持利用封装类.
要在上述功效的底子上增添测试数据库交互历程的功效,还需求对利用程序的其他部份作一些改变,很明显的是,这样作需求一定的代价.
幸运的是,当一个框架象JDBC那样几近完好采取接口来定义时,要用别的的实现替换此中的作一个类就相当简单了.我们可以利用一个封装类替换一个接口的任何一种实现,该封装类封装原有的类,并转发全部对本来类的办法的调用.在本篇文章中,我们可以利用一个封装类替换掉JDBC类,将我们监测JDBC性能的功效安排在封装类中,然后使监测功效随整个利用程序的履行而履行.
以上是“若何测定JDBC的性能[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |