关于封装DAO,javabean,jsp的层次结构以及代码的效率!(附代码)————大家pp!!
先show 一下封装的dao
------------------------
package ees.dbaccess;
import java.sql.*;
import java.util.*;
import java.io.*;
import pms.pmora;
public class GuidelineDAO{
private java.util.Collection con=null;
private pmora db=new pmora(); //ClassFor,建立连接
public java.util.Collection getGuidelinebyParent(java.math.BigDecimal parentid)
throws SQLException {
con=new ArrayList();
try {
String sql="select * from ees_guideline where parentid="+parentid;
ResultSet rs=db.executeQuery(sql);
while (rs.next()){
GuidelineVO v=new GuidelineVO();
int i=1;
v.setGuidelineid(rs.getBigDecimal(i++));
v.setGuidelinename(rs.getString(i++));
v.setParentid(rs.getBigDecimal(i++));
v.setNote(rs.getString(i++));
v.setLayer(rs.getBigDecimal(i++));
con.add(v);
}
} catch (Exception e) {
System.out.println("查询—指标体系出错— u"+e.getMessage());
}
return con;
}
public java.util.Collection getGidbyParent(java.math.BigDecimal parentid)
throws SQLException {
con=new ArrayList();
try {
String sql="select guidelineid from ees_guideline where parentid="+parentid;
ResultSet rs=db.executeQuery(sql);
while (rs.next()){
GuidelineVO v=new GuidelineVO();
int i=1;
v.setGuidelineid(rs.getBigDecimal(i++));
con.add(v);
}
} catch (Exception e) {
System.out.println("查询—指标id出错— u"+e.getMessage());
}
return con;
}
public void close(){
db.close();
}
}
-----------------------
这个比较的简单,但是也有不同类型的查询返回不同的 Collection。
其中,我把
pmora db=new pmora(); 设定为私有变量,这样,所有的 表操作(query,update)全部共享这个连接,直到这个页面中调用了 DAO.close();关闭他的连接
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
经过测试,我发现这样比 在每个 表操作(query,update)要快一些!
下面贴一个
我应用这个 bean的例子,,我就是在这个页面的时候
出现了问题,,,,
问题点数:100、回复次数:13Top
1 楼stillfire(恒)回复于 2004-09-02 12:52:16 得分 0
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.util.*,ees.dbaccess.*,zjn.util.ConvertDateStr;" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<link rel="stylesheet" href="/pms/image/main.css" type="text/css">
<script language="javascript" src="/pms/image/time.js"></script>
</head>
<jsp:useBean id="GetValue" scope="page" class="ees.dbaccess.idToname" />
<jsp:useBean id="expertdao" scope="page" class="ees.dbaccess.RelationDAO" />
<jsp:useBean id="Evaluate" scope="page" class="ees.dbaccess.Evaluation" />
<jsp:useBean id="scoredao" scope="page" class="ees.dbaccess.ScoreDAO" />
<jsp:useBean id="totalscoredao" scope="page" class="ees.dbaccess.TotalscoreDAO" />
<%!
String expertid="";
java.math.BigDecimal guidelineid=null,guidelineid1=null,finalscore=null;
String action="",flag="";
java.util.Collection con=null,con1=null;// for guidelineVO
java.util.Collection con2=null;//for RelationVO
Iterator it=null,it1=null,it2=null;
GuidelineVO vo=null,vo1=null;
RelationVO vo2=null;
// GuidelineDAO guidedao=new GuidelineDAO();
%>
<%
//if (guidedao==null){
GuidelineDAO guidedao=new GuidelineDAO();
// } //定义再<%! 后面是全局变量,这里是每次都初始化的变量
// Evaluation Evaluate=new Evaluation();
String resourceid=request.getParameter("resourceid");
if (totalscoredao.IsUpdate(resourceid)){
action="update";
} else {
action="add";
}
%>
<body>
<table width=780 border="0" cellpadding="0" cellspacing="1" align="center">
<tr>
<td class="cl1_titleoff" width="13%" align="center" valign="middle">专家\指标体系</td>
<%
con1=guidedao.getGidbyParent(new java.math.BigDecimal(0));
for ( it1 = con1.iterator(); it1.hasNext(); ) {
vo1 = (GuidelineVO)it1.next();
guidelineid1=vo1.getGuidelineid();
%>
<td class="cl1_titleoff"width="60" align="center" valign="middle"><%=guidelineid1%></td>
<%
con=guidedao.getGidbyParent(guidelineid1);
for ( it = con.iterator(); it.hasNext(); ){
vo = (GuidelineVO)it.next();
guidelineid=vo.getGuidelineid();
%>
<td class="cl1_titleoff"width="61" align="center" valign="middle" ><%=guidelineid%></td>
<%
}//二级指标
}//一级指标
%>
<td class="cl1_titleoff" width="13%" >
专家总分
</td>
</tr>
<%
con2=expertdao.getRelation(resourceid);
int expcnt=0;
java.math.BigDecimal sumscore=new java.math.BigDecimal(0);
for ( it2 = con2.iterator(); it2.hasNext(); ) {
vo2 = (RelationVO)it2.next();
expertid=vo2.getUserid();
%>
<tr>
<td class="cl1_titleoff">
<%=GetValue.getNamebyId(expertid)%>
</td>
<%
con1=guidedao.getGidbyParent(new java.math.BigDecimal(0));
for ( it1 = con1.iterator(); it1.hasNext(); ) {
vo1 = (GuidelineVO)it1.next();
guidelineid1=vo1.getGuidelineid();
%>
<td class="mode4" width="60" align="center" valign="middle" bgcolor=><%
if (scoredao.IsUpdate(resourceid,expertid)){
out.println(Evaluate.getFirstValue(guidelineid1,resourceid,expertid));
} else {
}%>
</td>
<%
con=guidedao.getGidbyParent(guidelineid1);
for ( it = con.iterator(); it.hasNext(); ){
vo = (GuidelineVO)it.next();
guidelineid=vo.getGuidelineid();
%>
<td class=""width="61" align="center" valign="middle" bgcolor=>
<%
if (scoredao.IsUpdate(resourceid,expertid)){
out.println(GetValue.getScore(guidelineid,resourceid,expertid));
} else {
}
%>
</td>
<%
}
}
%>
<td><%
if (scoredao.IsUpdate(resourceid,expertid)){
finalscore=Evaluate.getFinalResult(resourceid,expertid);
sumscore=sumscore.add(finalscore);
out.println("专家分 "+finalscore+" 总分 "+sumscore);
} else {
}
%></td>
</tr>
<%
if (scoredao.IsUpdate(resourceid,expertid)){
expcnt++;//打分专家的数量
}
}// end of the row
double sumdouble=sumscore.doubleValue();
double avgdouble=sumdouble/expcnt;
//avgscore=sumscore.divide(cnt,2,BigDecimal.ROUND_HALF_UP);
%>
<%
expertdao.close();
guidedao.close();
Evaluate.close();
scoredao.close();
%>
</table>
<p>
<p>
<table width="600" border="0" cellspacing="0" cellpadding="1" align="center">
<form name="frmAdd" action="/ees/admin/totalscore?resourceid=<%=resourceid%>&action=<%=action%>" method="post">
<tr align="left" bgcolor="#8db4ef">
<td class="cl1_titleoff" height="24" colspan="2" valign="middle"><div align="center"><font color="#FFFFFF">评估结论</font></div></td>
</tr>
<tr bgcolor="#FFFFFF">
<td class="mode4"width="110" height="24" align="right" valign="middle">总体得分</td>
<td class="mode5"width="486" valign="middle" align="middle"><font color="#FF0000"><% out.println("专家数 "+expcnt+" 总分 "+sumdouble+" 平均 "+avgdouble);%></font>
<input type="hidden" name="tscore" value="<%=avgdouble%>">
</td>
</tr>
<%
TscoreVO resultvo= totalscoredao.getOneRow(resourceid);
%>
<tr bgcolor="#FFFFFF">
<td class="mode4"width="110" height="24" align="right" valign="middle">评估专家</td>
<td class="mode5"width="486" valign="middle" align="middle"></td>
</tr>
<tr bgcolor="#FFFFFF">
<td class="mode4"width="110" height="24" align="right" valign="middle">评估时间</td>
<td class="mode5"width="436" valign="middle" align="left">
<input type="text" style="WIDTH:100px" name="totaltime" value="<%
if (action.equals("update")){
out.println(ConvertDateStr.timeTostr(resultvo.getTotaltime()));
}
%>">
<a href="javascript:show_calendar('frmAdd.totaltime');" onmouseover="window.status='Date Picker';return true;" onmouseout="window.status='';return true;"><img src="/pms/image/show-calendar.gif" width=24 height=16 border=0 ></a></td>
</tr></td>
</tr>
<tr bgcolor="#FFFFFF">
<td class="mode4"width="110" height="24" align="right" valign="middle">评估结论</td>
<td class="mode5"width="486" valign="middle" align="left"><textarea name="note" cols="50" rows="10" ><%
if (action.equals("update")){
out.print(resultvo.getNote());}
%></textarea></td>
</tr>
<tr bgcolor="#FFFFFF">
<td height="20" colspan="2" align="right" valign="middle"> <div align="center"> <%=action%>
<input type="submit" name="Submit" value="确定">
<input type="reset" name="Submit2" value="重置">
<input name="button" type="button" class="main1"
style=font-size:9pt;background-color:rgb(255,255,255);color:rgb(0,0,0) onclick="history.go(-1)" value="返回">
</div></td>
</form>
<%
GetValue.close();
totalscoredao.close();
%>
</tr>
</table>
</body>
</html>
Top
2 楼stillfire(恒)回复于 2004-09-02 13:00:02 得分 0
关键的是下面
<jsp:useBean id="GetValue" scope="page" class="ees.dbaccess.idToname" />
<jsp:useBean id="expertdao" scope="page" class="ees.dbaccess.RelationDAO" />
<jsp:useBean id="Evaluate" scope="page" class="ees.dbaccess.Evaluation" />
<jsp:useBean id="scoredao" scope="page" class="ees.dbaccess.ScoreDAO" />
<jsp:useBean id="totalscoredao" scope="page" class="ees.dbaccess.TotalscoreDAO" />
<%!
guidedao=new GuidelineDAO();
%>
<%
%>
1。把GuidelineDAO定义为全局变量 <%! %>
则速度最快,但是,这样的话,显然不能正确的 建立和关闭的连接(
◎如果有函数能够测试 连接是否关闭就好了◎)
2。只有GuidelineDAO 定义为局部变量, 这样每次刷新页面都要初始化一次,速度就要慢下来了!
3。还有一点就是,我不知道如果把 DAO定义为 javabean (我不知道不同scope对程序有什么影响) 速度怎么样!?
我想问一下大家的dao, 怎么样封装?
调用bean 的 怎么样定义不同的scope呢?????????Top
3 楼BillyW(阿弥陀佛)回复于 2004-09-02 13:01:16 得分 30
在JSP页面访问数据库、加入业务逻辑可不是一个好主意。
注意分离!Top
4 楼stillfire(恒)回复于 2004-09-02 13:03:09 得分 0
接上面的,
问问关于基本的面向对象的问题!
class A{
private ss=null;
public A(){
ss=new ss();
}
}
和 class A{
private ss=new ss();
}
有没有区别,在对象初始化的时候,怎么样才能 占用最少的资源呢?
Top
5 楼stillfire(恒)回复于 2004-09-02 14:06:07 得分 0
回复人: BillyW(阿弥陀佛)
Top
6 楼stillfire(恒)回复于 2004-09-02 14:14:00 得分 0
回复人: BillyW(阿弥陀佛)
我这个页面主要还是 通过Collection 返回不同的集合,但是有一些表需要进行连接查询
比如: select a from A where b in (select b from B where)
这样的连接查询,,,,
我使用的 把b 从B中取出来,然后通过一个bean (通过读 B 把b 转化为 a)
GetValue.getNamebyId(expertid)
就是一个通过id转化得到name 的 bean
if (totalscoredao.IsUpdate(resourceid)){
action="update";
} else {
action="add";
}
是一个判断这个表中有没有响应的值,,,,,如果有的话进行更新,没有则是操作!
那么 也就 掺着
value="<%
if (action.equals("update")){
out.println(ConvertDateStr.timeTostr(resultvo.getTotaltime()));
}
%>">
这样的业务逻辑了!!
Top
7 楼yangzuyu12(秋天的童话)回复于 2004-09-02 14:14:30 得分 0
?@#$%^&*()!!·#¥%……—*()?〉《|+——)|+_Top
8 楼stillfire(恒)回复于 2004-09-02 17:02:27 得分 0
写的 撇了,,
把楼上的看晕了,,,,
顶一下Top
9 楼stillfire(恒)回复于 2004-09-03 07:56:49 得分 0
大家给点反映!
up 一下啊Top
10 楼HITZXL(编程要厚道)回复于 2004-09-03 08:38:40 得分 30
太长了!
没看出关键问题
但一味追求代码效率,恐怕不是层次结构所要解决的问题Top
11 楼stillfire(恒)回复于 2004-09-03 09:39:13 得分 0
谢谢楼上的。。。。。。
不过,我是就觉得层次不清晰,因为
<%!%>还有 bean之间的 概念还不是很清晰Top
12 楼flylyke(爱就像英雄莫问出处)回复于 2004-09-03 10:00:11 得分 40
业务和逻辑干嘛要写在jsp页里呢。既然你已经有DAO的概念了
建议看看hibernateTop
13 楼stillfire(恒)回复于 2004-09-03 13:30:40 得分 0
楼上说得是不是
把 update 和add 放在一个页面,我觉得这样,网页 看起来更加清晰一些Top




