2007-06-21

将猪冬眠

刚才发现搜狗输入法无法输入冬眠的眠字,这个bug都被我测出来了强!

最近发现自己的记忆力真的是很差,不是一般的差,自己做的东西别人问放在哪里,自己找半天找不到,自己找自己做的东西也找不到,领导告诉做什么到时候都忘了,。。。,唉,怎么了,这么早就进入了更年期还是老年健忘期,这么年轻就这样,将来怎么办呢,

近一个星期来都是在做数据库的东西,以前一直用ibatis,把sql一写就完事了,现在突然转到hibernate来,很多地方光靠sql是远远解决不了问题,而且很多操作hibernate不支持,唉,还在用hibernate2,不得不hibernate,jdbc一起搞,(主要原因还是对hibernate不熟悉)有时候同一个模块甚至同一个表用到了两种操作,让我很是头大,有些时候要的就是你什么不会,当我还对jdbc的操作很生涩的时候,我不得不在这个时候重新把数据库的操作重新拿过来好好的学习,重新做,另有一番收获,当你什么都不会的时候会碰到很多问题,甚至有些问题操作熟练的也不一定碰的到的,就分页的问题我一向是非常的郁闷,在wiz的时候,框架里把分页封装了,你只要按照设定的要求把该给的东西都放到里面就ok了,到了这里,新的公司对分页也做了封装,但是现在面临hibernate与jdbc一起操作的时候,封装的分页已经无法满足我的需求,但是很少去静下心来去自己写一个分页,这一点很是惭愧,唉,今天做了一个很变态的做法,在页面做数据库的操作,直接对结果集Resultset进行操作,呵呵,好别扭。但是这个让我碰到另一个问题
出现的异常:对只转发结果集的无效操作: last
解决的方法在生成的statement中加一个参数

分析: 异常出现于移动结果集的指针时,原因是在生成statement对象的时候提供的参数不同
无参数的那个方法使用的是默认参数,statement执行后得到的结果集类型为 ResultSet.TYPE_FORWARD_ONLY.这种类型的结果集只能通过rs.next();方法逐条读取,使用其他方法就会报异常. 如果想执行一些复杂的移动结果集指针的操作就要使用其他参数了
顺便简单介绍一下各个参数:
ResultSet.TYPE_FORWARD_ONLY (略)
ResultSet.TYPE_SCROLL_INSENSITIVE 双向滚动,但不及时更新,就是如果数据库里的数据修改过,并不在ResultSet中反应出来。
ResultSet.TYPE_SCROLL_SENSITIVE 双向滚动,并及时跟踪数据库里的更新,以便更改ResultSet中的数据。
ResultSet.CONCUR_READ_ONLY 只读取ResultSet
ResultSet.CONCUR_UPDATABLE 用ResultSet更新数据库

Statement stmt=conn.createStatemen(ResultSet.TYPE_SCROLL_INSENSITVE,ResultSet.CONCUR_READ_ONLY);
对于PreparedStatement
String sqlStr="select impid,totallength,totalcount,avglength ,t4.imp_Name from (select t3.impid,sum(t3.length) totalLength ,count(t3.impid) totalCount ,(sum(t3.length)/count(t3.impid)) avgLength from(select t1.MEDIALOG_IMPID impid,(t1.MEDIALOG_ENDTIME-t1.MEDIALOG_STARTTIME) as length,t1.medialog_mediaurl lUrl,t2.ICP_SPCAE_PLAY_URL surl from media_log t1, rms_icp_space t2 where instr(t1.medialog_mediaurl ,t2.ICP_SPCAE_PLAY_URL,1,1)>0 and t1.MEDIALOG_IMPID!=-1 order by t2.ICP_SPCAE_PLAY_URL desc) t3 group by t3.impid)t5 join imp t4 on t5.impid=t4.imp_id";

pstm=conn.prepareStatement(sqlStr,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
sqlRst=pstm.executeQuery();


而与次同时也出现了另一个分页,不是一般的蹩脚。把数据库的操作直接放到了页面里,呵呵,及其不负责任的做法,强烈谴责自己!粗糙的代码见证了成果的获取过程,不过这个分页慢好用,呵呵

<%
Session sessions=HBFactory.getInstance().getSessions().openSession();
Connection conn=sessions.connection();
ResultSet sqlRst=null;
PreparedStatement pstm=null;
try{
int intPageSize; //一页显示的记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
String strPage;
int i;
//设置一页显示的记录数
intPageSize = 4;
//取得待显示页码
strPage = request.getParameter("page");
if(strPage==null){
intPage = 1;
}else{
intPage = Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}

String sqlStr="select impid,totallength,totalcount,avglength ,t4.imp_Name from (select t3.impid,sum(t3.length) totalLength ,count(t3.impid) totalCount ,(sum(t3.length)/count(t3.impid)) avgLength from(select t1.MEDIALOG_IMPID impid,(t1.MEDIALOG_ENDTIME-t1.MEDIALOG_STARTTIME) as length,t1.medialog_mediaurl lUrl,t2.ICP_SPCAE_PLAY_URL surl from media_log t1, rms_icp_space t2 where instr(t1.medialog_mediaurl ,t2.ICP_SPCAE_PLAY_URL,1,1)>0 and t1.MEDIALOG_IMPID!=-1 order by t2.ICP_SPCAE_PLAY_URL desc) t3 group by t3.impid)t5 join imp t4 on t5.impid=t4.imp_id";
pstm=conn.prepareStatement(sqlStr,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
//pstm=conn.prepareStatement(sqlStr) ;
sqlRst=pstm.executeQuery();
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount+intPageSize-1) / intPageSize;
//调整待显示的页码
if(intPage>intPageCount) intPage = intPageCount;
// ResultSet sqlRst= Db.MediaLog().filmList();

%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<link rel="stylesheet" href="../../css/css_list.css"/>
<title></title>
<script src="../../common/image.js" language="JavaScript"></script>
<script src="../../common/CheckData.js" language="JavaScript"></script>
<script type="text/javascript ">
function doSubmit(formName,action){
formName.action=action;
formName.submit();
}
</script>
</head>
<body><div align="center">
<form name="formName" method="POST" action="IllegalFilmManage.jsp" >
<br/>
<table>
<tr><td align="center"><strong>。。。</strong></td></tr>
</table>
<br/>
<table align="center" border="1" bordercolordark="#ffffff" bordercolorlight="#cccccc" cellpadding="0" cellspacing="0" width="700" class="table_border" frame="box">
<tr align=center>
<td align=center colspan=6>
第<%=intPage%>页 共<%=intPageCount%>页
<%if(intPage<intPageCount){%><a href="IllegalFilmManage.jsp?page=<%=intPage+1%>">下一页 </a><%}%>
<%if(intPage>1){%><a href="IllegalFilmManage.jsp?page=<%=intPage-1%>">上一页</a><%}%>
转到第:<input type="text" name="page" size="8"> 页
<span><input type=submit name="go" value="跳转" /></span>
</td>
</tr>
<tr>
<th align="center" width="5%">序号</th>
。。。。
</tr>
<tr>
<%if(intPageCount>0){
sqlRst.absolute((intPage-1) * intPageSize + 1);
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){
%>
<tr>
。。。
</tr>
<% sqlRst.next(); i++;
}
}
%>
<tr>
<td align="left" colspan="1"><input type="button" value="开始统计" onClick=" window.location.href='IllegalFilmManage.jsp'"/></td>
</tr>

</table>
<br/>
</form>
</div>
</body>
</html>
<%}catch(Exception e){
e.printStackTrace();
}finally{
sqlRst.close();
pstm.close();
conn.close ();
}
%>

原文
http://www.cnblogs.com/mingal/archive/2007/04/22/666373.html
评论
发表评论

您还没有登录,请登录后发表评论

rinnix
搜索本博客
存档
最新评论
评论排行榜