关于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();
%>
...全文
229 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
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(){

}
香芋元宇宙 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
加载更多回复(7)

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧