既然我们把数据库访问封装起来了,那么如果查询数据库返回的是一系列结果,比如我们从数据库中得到所有人的用户名,然后在jsp页面显示出来。
这里就有一个普遍疑问,我这个javabean是返回resultset到jsp中还是collection?
我曾经有段时间图省事,直接返回resultset,然后在我的jsp页面中是大量的resultset遍历。这其实还是将数据层和显示层混淆在一起。在ejb cmp中,返回的是collection,这样偶合性降低,不用在修改数据库结构后,一直修改程序到前台jsp页面,这和以前的php asp开发方式没两样。
但是返回collection效率不是很高,因为意味着在内存中要开辟一个内存存放所有的结果。
我看了http://builder.com.com/article.jhtml?id=u00220020814r4b01.htm这篇文章后,觉得启发很大,返回iterator就可以了。
iterator也是个模式,在jive中大量使用了iterator,我以前很奇怪,为什么他没事自己写个iterator,现在知道原因了,这样节省内存,而且效率高。
看下面比较:
public list getusers() {
resultset rs = userdbquery();
list retval = new arraylist();
while (rs.next()) {
retval.add(rs.getstring(1));
}
return retval;
}
上面是个我们采取返回collection后最常用的方法,将resultset中的用户名加入list再返回,显然这很耗费内存。
使用iterator返回:
public iterator getusers() {
final resultset rs = userdbquery();
return new iterator() {
private object next;
public boolean hasnext() {
if (next == null) {
if (! rs.next()) {
return false;
}
next = rs.getstring(1);
}
return true;
}
public object next() {
if (! hasnext()) {
throw new nosuchelementexception();
}
string retval = next;
next = null;
return retval;
}
public void remove() {
throw new unsupportedoperationexception("no remove allowed");
}
}
}public iterator getusers() {
resultset rs = userdbquery();
list list = new arraylist()
while (rs.next()) {
list.add(rs.getstring(1));
}
return list.iterator();
}connection con = null;
preparedstatement ps = null;
resultset rs = null;
try {
con = getconnection();//getconnection is your method
ps = con.preparestatement(sql);
rs = ps.executequery();
///...........
}
catch (sqlexception ex) {
///错误处理
}
finally{
try {
if(ps!=null)
ps.close();
}
catch (sqlexception ex) {
///错误处理
}
try{
if(con!=null)
con.close();
}
catch (sqlexception ex) {
///错误处理
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器