public ArrayList getUserInfo()
{
long methodstart = System.currentTimeMillis();
ArrayList<User> list = new ArrayList<User>();
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
User user= null;
String sql = "select * from t_user";
try {
long constart = System.currentTimeMillis();
conn = GetDbConnection.GetConnetion();
long conend = System.currentTimeMillis();
System.out.println("Connection time "+(conend-constart)+" ms");
if (conn != null) {
rs = stmt.executeQuery(sql);
}
long resultstart = System.currentTimeMillis();
while (rs.next()) {
user= new User();
user.setUsername(rs.getString(1));
user.setPassword(rs.getString(2));
list.add(user);
}
stmt.close();
long resultend = System.currentTimeMillis();
System.out.println("getUserInfo ResultSet time "+(resultend-resultstart)+" ms");
}catch (Exception ex) {
System.out.println(ex.toString());
} finally {
try {
if (rs != null) {
rs.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
}
}
long methodend = System.currentTimeMillis();
System.out.println("getUserInfo Time "+(methodend-methodstart)+" ms");
return list;
} 以上是我简单的一个测试
主要测试
1.数据库连接时间
2.数据库执行时间
3.整个方法的时间(这种测试方法 我不能确定是否正确)
测试结果(10次左右) (数据库是局域网)
Connection time 360 ms (数据连接是用jdbc连接 用jndi测试过数据居然只要0ms,完全不明白为何差距如此大)
getUserInfo ResultSet time 16 ms
getUserInfo Time 4485 ms
一共返回39条记录
我这样测试了很多次 总觉的时间不合理
我认为 连接时间+执行时间 <= 整个方法的时间 (关闭连接的时间没有测试)
但 360+16 <4485 差距也太大了点 相减的4000ms到底在干什么?(主要不块不是很了解,希望有人帮我解答~!!!) 而且 一个数据操做 往往要调用另一个 数据操作 这将进行两次数据库连接 整个方法的时间更是大大的增长
如果都写个一个数据操作的话代码也太庞大了 (这块又如何解决???) 我这样的测试是不是合理(我也怀疑),如果不合理 告之我合理的方法
jdbc的性能关键在那里?如何才能提高?
以上是我的一些疑问 望了解的人告之
{
long methodstart = System.currentTimeMillis();
ArrayList<User> list = new ArrayList<User>();
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
User user= null;
String sql = "select * from t_user";
try {
long constart = System.currentTimeMillis();
conn = GetDbConnection.GetConnetion();
long conend = System.currentTimeMillis();
System.out.println("Connection time "+(conend-constart)+" ms");
if (conn != null) {
rs = stmt.executeQuery(sql);
}
long resultstart = System.currentTimeMillis();
while (rs.next()) {
user= new User();
user.setUsername(rs.getString(1));
user.setPassword(rs.getString(2));
list.add(user);
}
stmt.close();
long resultend = System.currentTimeMillis();
System.out.println("getUserInfo ResultSet time "+(resultend-resultstart)+" ms");
}catch (Exception ex) {
System.out.println(ex.toString());
} finally {
try {
if (rs != null) {
rs.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
}
}
long methodend = System.currentTimeMillis();
System.out.println("getUserInfo Time "+(methodend-methodstart)+" ms");
return list;
} 以上是我简单的一个测试
主要测试
1.数据库连接时间
2.数据库执行时间
3.整个方法的时间(这种测试方法 我不能确定是否正确)
测试结果(10次左右) (数据库是局域网)
Connection time 360 ms (数据连接是用jdbc连接 用jndi测试过数据居然只要0ms,完全不明白为何差距如此大)
getUserInfo ResultSet time 16 ms
getUserInfo Time 4485 ms
一共返回39条记录
我这样测试了很多次 总觉的时间不合理
我认为 连接时间+执行时间 <= 整个方法的时间 (关闭连接的时间没有测试)
但 360+16 <4485 差距也太大了点 相减的4000ms到底在干什么?(主要不块不是很了解,希望有人帮我解答~!!!) 而且 一个数据操做 往往要调用另一个 数据操作 这将进行两次数据库连接 整个方法的时间更是大大的增长
如果都写个一个数据操作的话代码也太庞大了 (这块又如何解决???) 我这样的测试是不是合理(我也怀疑),如果不合理 告之我合理的方法
jdbc的性能关键在那里?如何才能提高?
以上是我的一些疑问 望了解的人告之
1:首先做好数据库连接池.因为连接的建立很消耗时间而且每次都建立很浪费.还不易于处理资源释放之类的问题.
2:会频繁使用的相同类似语句 使用预处理编译的preparestatement而不是statement对象.
而且如果可能的话,还是用数据库的分页查询,比如MYSQL就是limit语句吧.ORACLE就是rownum之类的
t0 = System.currentTimeMills();
第一个功能时间
t1 = System.currentTimeMills();
t2 = System.currentTimeMills();
第二个功能时间
t3 = System.currentTimeMills();测试时不要在里面采用输出,打印输出是比较耗时的,等全部完成后再输出System.out.println(t1 - t0);
System.out.println(t3 - t2);一般来说,数据库操作花在连接上的时间是很多的,连接池中的连接是拿来就可以用了,
并不需要建立连接,所以时间消耗近乎是 0。