关于while循环的问题,给50分

phoenix_nono 2004-09-21 04:53:16
请高手帮忙看一段代码,应该显示出三条记录的,但是只显示一条记录,循环只执行了一次,如果把if之中的语句去掉,就能正常显示三条记录,还发现如果if里边有数据库查询语句的话,也只能执行一次循环,sql语句应该没有错误,想请各位高手看看到底如何修改循环才能正常执行,多谢了!
String begin_time="";
String glnum="";
String jh="";
rs = stmt.executeQuery("SELECT GLNUM,jh,BEGIN_TIME from zqrb where rq=to_date( '"+date1+"','YYYY-MM-DD')");
while (rs.next())
{
j=j+1;
begin_time=rs.getString("begin_time");
glnum=rs.getString("glnum");
jh=rs.getString("jh");
if(begin_time==null)
{
rs1 = stmt.executeQuery("select max(rq) as maxrq from zqrb where rq<to_date('"+date1+"','YYYY-MM-DD') and begin_time is not null and glnum='"+glnum+"' and jh='"+jh+"'");
while (rs1.next())
{
maxrq=rs1.getString("maxrq");
}
rs1.close();
date1=maxrq.substring(0,10);
rs2 = stmt.executeQuery("select begin_time from zqrb where rq=to_date('"+date1+"','YYYY-MM-DD') and glnum='"+glnum+"' and jh='"+jh+"'");
while (rs2.next())
{
begin_time=rs2.getString("begin_time");
}
rs2.close();
}
%>
<%=glnum%>,<%=jh%>,<%=date1%>,<%=begin_time%><br>
<%
}
rs.close();
%>
...全文
209 点赞 收藏 27
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
eshowsoft 2004-11-12
while 里 嵌套while里又嵌套if语名为什么老是出现记录集关闭。
回复
eshowsoft 2004-11-12
up
回复
phoenix_nono 2004-09-21
感谢各位帮忙,经过多次试验,终于解决了问题,发现还是要用多个stmt,而且不能把date=maxrq.substring(0,10);这一句放在if里边。特别感谢anyteam()、 kingfish(八百里秦川@龙城异客)和nhk166(带你下厨房),谢谢你们!
回复
phoenix_nono 2004-09-21
To:jyfugang() ,我改为equals("")试了试,还是不行:(谢谢你了!
回复
jyfugang 2004-09-21
if(aa==null)
改为if(aa.equeal(""))试试。
我以前也碰到过类似问题。
回复
phoenix_nono 2004-09-21
To: windydenny(布丁貓貓) ,按照你说的做了,可是还是不行,不管用啊。谢谢你了!
回复
windydenny 2004-09-21
把<%=maxrq%>放在內循環里執行.
回复
phoenix_nono 2004-09-21
To: nhk166(带你下厨房),前边已经回复过,定义多个stmt的结果也是一样的,也只能循环一次:(谢谢你了!
回复
windydenny 2004-09-21
把SQL語句列印出來放在數據庫執行.
回复
nhk166 2004-09-21
<%
String begin_time="";
String glnum="";
String jh="";
rs = stmt.executeQuery("SELECT GLNUM,jh,BEGIN_TIME from zqrb where rq=to_date( '"+date1+"','YYYY-MM-DD')");
while (rs.next())
{
j=j+1;
begin_time=rs.getString("begin_time");
glnum=rs.getString("glnum");
jh=rs.getString("jh");
if(begin_time==null)
{
Statement stmt2 = con.createStatement;
rs1 = stmt2.executeQuery("select max(rq) as maxrq from zqrb where rq<to_date('"+date1+"','YYYY-MM-DD') and begin_time is not null and glnum='"+glnum+"' and jh='"+jh+"'");
while (rs1.next())
{
maxrq=rs1.getString("maxrq");
}
rs1.close();
date1=maxrq.substring(0,10);
Statement stmt3 = con.createStatement;
rs2 = stmt3.executeQuery("select begin_time from zqrb where rq=to_date('"+date1+"','YYYY-MM-DD') and glnum='"+glnum+"' and jh='"+jh+"'");
while (rs2.next())
{
begin_time=rs2.getString("begin_time");
}
rs2.close();
}
%>
<%=glnum%>,<%=jh%>,<%=date1%>,<%=begin_time%><br/>
<%
}
rs.close();
%>
试下,学习中。。。。。
回复
phoenix_nono 2004-09-21
To:victorylj(cherry),不行呀,那样做的话就会报错“javax.servlet.ServletException: ?????java.sql.SQLException: ?????”,谢谢你了

回复
gaochao79 2004-09-21
这个办法行不通,要么联合查询,要么使用数组。其实能用嵌套查询的一般都可以用联合查询
回复
phoenix_nono 2004-09-21
To:benben980(竹本牛),在列有所有帖子的页面上边不是有提问的链接吗?
回复
jianyu807 2004-09-21
呵呵!照我说的做一下试试!定义一个数组
ArrayList sstrid = new ArrayList();
while(rs.next()){
sstrid.add(rs.getString("ID"));
}
Object[] sstr_id = sstrid.toArray();
for(){

}
回复
victorylj 2004-09-21
String begin_time="";
String glnum="";
String jh="";

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//添加

rs = stmt.executeQuery("SELECT GLNUM,jh,BEGIN_TIME from zqrb where rq=to_date( '"+date1+"','YYYY-MM-DD')");
while (rs.next())
{
j=j+1;
begin_time=rs.getString("begin_time");
glnum=rs.getString("glnum");
jh=rs.getString("jh");
if(begin_time==null)
{
rs1 = stmt.executeQuery("select max(rq) as maxrq from zqrb where rq<to_date('"+date1+"','YYYY-MM-DD') and begin_time is not null and glnum='"+glnum+"' and jh='"+jh+"'");
while (rs1.next())
{
maxrq=rs1.getString("maxrq");
}
rs1.close();
stmt.close();//添加

date1=maxrq.substring(0,10);

stmt = con.createStatemen(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//添加

rs2 = stmt.executeQuery("select begin_time from zqrb where rq=to_date('"+date1+"','YYYY-MM-DD') and glnum='"+glnum+"' and jh='"+jh+"'");
while (rs2.next())
{
begin_time=rs2.getString("begin_time");
}
rs2.close();
}
%>
<%=glnum%>,<%=jh%>,<%=date1%>,<%=begin_time%><br/>
<%
}
rs.close();
%>

添加了三句话,你在试试
回复
phoenix_nono 2004-09-21
很不幸,用多个stmt的结果也是一样的,只能查出一条记录:(
回复
benben980 2004-09-21
啊啊啊啊.......为什末没人理我?知秋,你一定是好心人,告诉我如何在社区提问呗,谢了!
回复
kingfish 2004-09-21
在if里面重新执行sql时,以前的结果集会自动关闭
回复
phoenix_nono 2004-09-21
rs中的sql语句本来能查出三条记录,rs2当然只能查出一条记录呀,因为限制条件较多,就想通过rs的循环一起查出三条记录。
回复
kingfish 2004-09-21
不应该使用同一个Statement
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-21 04:53
社区公告
暂无公告