怎样打开两个表?

时间:2023-01-10 11:53:01
String sql1="****";//打开留言信息表
ResultSet rs=conn.execute(sql1);
while(rs.next()){
//这里显示留言内容
//如果留言者是注册用户,那么我这里要显示注册信息
//需要再打开注册用户表,这里应该怎么打开???

}

31 个解决方案

#1


String sql1="****";
ResultSet rs=conn.execute(sql1);
while(rs.next()){
//这里显示留言内容
String sql2="****";
ResultSet rsUser=conn.execute(sql2);
while(rsUser.next()){
//这里显示注册信息
}
}

#2


String sql1="****";//打开留言信息表
ResultSet rs=conn.executeQuery(sql1);
while(rs.next()){
//这里显示留言内容
String sql1="select * from 注册用户表 where user_id="+rs.getInt("father_id")+"";
ResultSet rs1=stm1.executQuery(sql1);
if(rs1.next())
  out.println(rs1.getString("user_name"));
else
  out.println("xxxx");
}

#3


你们的方法尝试过吗/??

外层用了while(rs.next())循环~

里面再定义String 和ResultSet,循环起来是不是会重复声明???

#4


哎,那就可以在外面声明嘛。。
重写重写:
String strSQL="****";
ResultSet rs=conn.execute(sql1);
ResultSet rsUser=null;
while(rs.next()){
//这里显示留言内容
strSQL="****";
rsUser=conn.execute(strSQL);
while(rsUser.next()){
//这里显示注册信息
}
}

#5




出错了 javax.servlet.ServletException: After end of result set

#6


原来没注意看,Connection对象可以直接excute SQL语句么??
我好像没见过这样的用法。。
改一下你的代码试试:
String strSQL="****";
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery(sql1);
ResultSet rsUser=null;
while(rs.next()){
//这里显示留言内容
strSQL="****";
rsUser=stmt.executeQuery(strSQL);
while(rsUser.next()){
//这里显示注册信息
}
}

#7


哎,写错了写错了,重发:
String strSQL="****";
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery(strSQL);
ResultSet rsUser=null;
while(rs.next()){
//这里显示留言内容
strSQL="****";
rsUser=stmt.executeQuery(strSQL);
while(rsUser.next()){
//这里显示注册信息
}
}

#8


这样会导致重复的statement,或者用一句sql(外连接 or 内连接)

或者先将第一个sql的resultset写到一个数组里,然后遍历这个数组来查第二个sql
然后输出。

#9


简单一点的话为每个ResultSet 定义一个Statement

#10


劫分&捧场

#11


但是并不是任何时候都支持多Statement!!!

有时候会出现Satement占线的错误!

#12


to:vick(瞌睡虫)
你说:这样会导致重复的statement。。
我不是太明白,据我的理解,我只定义了一个statement,只是它执行了多条sql语句,返回多个dataset而已。。

另:jdbc 3.0以上支持一个statement打开多个dataset。。如果是3.0以下的版本,那就只能按照vick(瞌睡虫)所说的方法了,或者声明两个statement。。

#13


还是把两个表联起来查询效率高些,循环里重复生成的事件会严重降低数据库执行的效率

#14


恩,我也赞同:)

具体怎么联系两个表?

#15


声明:我的conn.executeQuery(sql)中的conn是连接数据库BEAN的ID

#16


关联好象会出现问题,因为不是每个留言者都是注册用户啊

#17


下面是我的“拍卖系统”中的一部分,可以试试!
 <jsp:useBean id="chip_in" scope="page" class="bb.InitDB"/>
  <%
   //查询是否有到期限的拍卖商品
   int n=0;
   int a[]=new int[50];
   String sql="select * from storage";
   ResultSet rs;
   rs=chip_in.executeQuery(sql);
 
   while(rs.next())
   {
    String end
    int id=rs.getInt("ID");_time=rs.getString("endtime");
    
    ResultSet rs2;
    String sql2="select * from chip_in where chip_id="+id+" and chip_time='"+end_time+"'";
    sql2=sql2+" order by chip_price DESC";
    rs2=chip_in.executeQuery(sql2);
    if(rs2.next())
    {
     int chip_id=rs2.getInt("chip_id");
     float chip_price=rs2.getFloat("chip_price");
     String chip_name=rs2.getString("chip_name");
     String username=rs2.getString("username");
     String success="成交";
   %>
  <tr> 
    <td width="85"><%=chip_id%></td>
    <td width="91"><%=chip_name%></td>
    <td width="93"><%=username%></td>
    <td width="103"><%=chip_price%></td>
    <td width="100"><b><a href="chip.jsp?operation=<%=chip_id%>"><%=success%></a></b></td>
  </tr>
  <%
   }
 } 
  %>

#18


String end


gisbeibei(柏林) 这个是什么意思?

#19


sql语句写成连结查询,一次查询返回所有结果

#20


怎么连接?如果他不是注册用户,在表里没有记录的~

#21


柏林,你的方法可以吗?

我这里怎么不行啊

javax.servlet.ServletException: After end of result set
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:471)
at org.apache.jsp.tt$jsp._jspService(tt$jsp.java:131)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

#22


我顶一下,这个问题没有人回答了吗?

#23


<%
String sql="select * from lybook";
ResultSet rs=conn.executeQuery(sql);
String sql1;
ResultSet rss;
while(rs.next())
{
out.println(rs.getString(1));
//sql1="select * from users where id=1";
//rss=conn.executeQuery(sql1);


//if(rss.next()){

//out.println(rss.getString(2));
//}
}
%>

为什么去掉注释后,外层就不循环了呢?

#24


没人会吗?:(

#25


1--关于不是注册用户,在表里没有用户纪录的问题,可以使用外部连接的语句来实现,以oracle为例:
select tbl_lybook.liuyan, tbl_lybook.userid, tbl_user.userinfo from tbl_lybook, tbl_user where tbl_lybook.userid=tbl_user.userid(+)
这样,如果tbl_user表中没有该用户的资料的话,tbl_user.userinfo会以空值来填充。。
2--关于去掉注释外层就不循环的问题,我觉得楼主可以去看看你的bean中executeQuery()方法返回的dataset。。如果返回的dataset变量是声明为类变量的话,我觉得对于楼主这样的循环交叉调用会有问题,一定要声明为方法变量。。

以上意见楼主可以参考试验一下。。

#26


我修改了2
将executeQuery()方法返回的变量定义成该方法的~
结果一样~

#27


重启了你的应用服务器没??

#28


还是不行啊:(

是不是就是记录集的问题?

#29


那也有可能你的jdbc版本太低,不支持一个statement打开多个dataset,你再把statement变量也声明成方法变量试试。。

#30


版本太低,不会哦

我并列打开就可以的~~

#31


ding

#1


String sql1="****";
ResultSet rs=conn.execute(sql1);
while(rs.next()){
//这里显示留言内容
String sql2="****";
ResultSet rsUser=conn.execute(sql2);
while(rsUser.next()){
//这里显示注册信息
}
}

#2


String sql1="****";//打开留言信息表
ResultSet rs=conn.executeQuery(sql1);
while(rs.next()){
//这里显示留言内容
String sql1="select * from 注册用户表 where user_id="+rs.getInt("father_id")+"";
ResultSet rs1=stm1.executQuery(sql1);
if(rs1.next())
  out.println(rs1.getString("user_name"));
else
  out.println("xxxx");
}

#3


你们的方法尝试过吗/??

外层用了while(rs.next())循环~

里面再定义String 和ResultSet,循环起来是不是会重复声明???

#4


哎,那就可以在外面声明嘛。。
重写重写:
String strSQL="****";
ResultSet rs=conn.execute(sql1);
ResultSet rsUser=null;
while(rs.next()){
//这里显示留言内容
strSQL="****";
rsUser=conn.execute(strSQL);
while(rsUser.next()){
//这里显示注册信息
}
}

#5




出错了 javax.servlet.ServletException: After end of result set

#6


原来没注意看,Connection对象可以直接excute SQL语句么??
我好像没见过这样的用法。。
改一下你的代码试试:
String strSQL="****";
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery(sql1);
ResultSet rsUser=null;
while(rs.next()){
//这里显示留言内容
strSQL="****";
rsUser=stmt.executeQuery(strSQL);
while(rsUser.next()){
//这里显示注册信息
}
}

#7


哎,写错了写错了,重发:
String strSQL="****";
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=stmt.executeQuery(strSQL);
ResultSet rsUser=null;
while(rs.next()){
//这里显示留言内容
strSQL="****";
rsUser=stmt.executeQuery(strSQL);
while(rsUser.next()){
//这里显示注册信息
}
}

#8


这样会导致重复的statement,或者用一句sql(外连接 or 内连接)

或者先将第一个sql的resultset写到一个数组里,然后遍历这个数组来查第二个sql
然后输出。

#9


简单一点的话为每个ResultSet 定义一个Statement

#10


劫分&捧场

#11


但是并不是任何时候都支持多Statement!!!

有时候会出现Satement占线的错误!

#12


to:vick(瞌睡虫)
你说:这样会导致重复的statement。。
我不是太明白,据我的理解,我只定义了一个statement,只是它执行了多条sql语句,返回多个dataset而已。。

另:jdbc 3.0以上支持一个statement打开多个dataset。。如果是3.0以下的版本,那就只能按照vick(瞌睡虫)所说的方法了,或者声明两个statement。。

#13


还是把两个表联起来查询效率高些,循环里重复生成的事件会严重降低数据库执行的效率

#14


恩,我也赞同:)

具体怎么联系两个表?

#15


声明:我的conn.executeQuery(sql)中的conn是连接数据库BEAN的ID

#16


关联好象会出现问题,因为不是每个留言者都是注册用户啊

#17


下面是我的“拍卖系统”中的一部分,可以试试!
 <jsp:useBean id="chip_in" scope="page" class="bb.InitDB"/>
  <%
   //查询是否有到期限的拍卖商品
   int n=0;
   int a[]=new int[50];
   String sql="select * from storage";
   ResultSet rs;
   rs=chip_in.executeQuery(sql);
 
   while(rs.next())
   {
    String end
    int id=rs.getInt("ID");_time=rs.getString("endtime");
    
    ResultSet rs2;
    String sql2="select * from chip_in where chip_id="+id+" and chip_time='"+end_time+"'";
    sql2=sql2+" order by chip_price DESC";
    rs2=chip_in.executeQuery(sql2);
    if(rs2.next())
    {
     int chip_id=rs2.getInt("chip_id");
     float chip_price=rs2.getFloat("chip_price");
     String chip_name=rs2.getString("chip_name");
     String username=rs2.getString("username");
     String success="成交";
   %>
  <tr> 
    <td width="85"><%=chip_id%></td>
    <td width="91"><%=chip_name%></td>
    <td width="93"><%=username%></td>
    <td width="103"><%=chip_price%></td>
    <td width="100"><b><a href="chip.jsp?operation=<%=chip_id%>"><%=success%></a></b></td>
  </tr>
  <%
   }
 } 
  %>

#18


String end


gisbeibei(柏林) 这个是什么意思?

#19


sql语句写成连结查询,一次查询返回所有结果

#20


怎么连接?如果他不是注册用户,在表里没有记录的~

#21


柏林,你的方法可以吗?

我这里怎么不行啊

javax.servlet.ServletException: After end of result set
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:471)
at org.apache.jsp.tt$jsp._jspService(tt$jsp.java:131)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

#22


我顶一下,这个问题没有人回答了吗?

#23


<%
String sql="select * from lybook";
ResultSet rs=conn.executeQuery(sql);
String sql1;
ResultSet rss;
while(rs.next())
{
out.println(rs.getString(1));
//sql1="select * from users where id=1";
//rss=conn.executeQuery(sql1);


//if(rss.next()){

//out.println(rss.getString(2));
//}
}
%>

为什么去掉注释后,外层就不循环了呢?

#24


没人会吗?:(

#25


1--关于不是注册用户,在表里没有用户纪录的问题,可以使用外部连接的语句来实现,以oracle为例:
select tbl_lybook.liuyan, tbl_lybook.userid, tbl_user.userinfo from tbl_lybook, tbl_user where tbl_lybook.userid=tbl_user.userid(+)
这样,如果tbl_user表中没有该用户的资料的话,tbl_user.userinfo会以空值来填充。。
2--关于去掉注释外层就不循环的问题,我觉得楼主可以去看看你的bean中executeQuery()方法返回的dataset。。如果返回的dataset变量是声明为类变量的话,我觉得对于楼主这样的循环交叉调用会有问题,一定要声明为方法变量。。

以上意见楼主可以参考试验一下。。

#26


我修改了2
将executeQuery()方法返回的变量定义成该方法的~
结果一样~

#27


重启了你的应用服务器没??

#28


还是不行啊:(

是不是就是记录集的问题?

#29


那也有可能你的jdbc版本太低,不支持一个statement打开多个dataset,你再把statement变量也声明成方法变量试试。。

#30


版本太低,不会哦

我并列打开就可以的~~

#31


ding