banq老师,关于将ResultSet封装成List返回的问题

06-03-28 Q088
这是我写的查询方法

	public static List executeQuery(String sql) {
		Statement stmt = null;
		Connection con = null;
		ResultSet rst = null;
		List resultList = new LinkedList();
		try {
			con = DBConnection.createConnection();
			stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_READ_ONLY);
			rst = stmt.executeQuery(sql);
			int n = rst.getMetaData().getColumnCount();//取得总列数
			while ( rst.next() ) {
				Map map = new HashMap();
				for (int i = 1; i <= n; i++) {					
					map.put(rst.getMetaData().getCatalogName(i), rst.getObject(i));
				}
				resultList.add(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		} finally {
			DBConnection.releaseResultSet(rst);// 释放资源
			DBConnection.releaseStatement(stmt);
			DBConnection.releaseConnection(con);
		}
		return resultList;
	}

把ResultSet包装成List返回

在这里要循环n次,把每条记录的每个字段放进Map中,又循环n次再把每个Map对象放到List中,最后返回

返回读取时,又要转成iterator循环n次遍厉元素,再把每个元素转换成Map对象读取key-value对

如果查询的是大量的数据,这样频繁的调用,n次的转来转去,会不会增加开销呢?我下载你的jivejdon3.0,找了一点您操作数据库的部分,也有这样频繁的操作,这个问题,我一直不解

banq老师可否指点一二

banq
2006-03-28 21:16
发生这种频繁操作现象只能是一次还可以,如果这种现象本身也很频繁发生,就影响性能了,所以使用缓存阻止这种现象频繁发生,以最少运行可能性换取最大性能

Q088
2006-03-28 22:29
banq老师您的意思是,通常只是会这样的查询一次.

第一次查询后就把结果放在内存中缓存起来,以备下次使用,就不用再频繁的查询数据库了,

哦,原来如此,先前我一直不明白您们这些前辈高人说的缓存,对象池之类的话,原来就是这个道理

banq老师再次受教了,谢谢您

猜你喜欢