<%
 try
  {
   ResultSet rs=dbc.executeQuery("select  dashangpin from dbo.dashangpin");//执行Sql语句
   rs.last();//将指针移动到最后一个
   int r=rs.getRow();//获得数据库的行数
   rs.absolute(1);//数据库的指针回滚到索引为1的地方;
   //rs.beforeFirst();
   Vector vt=new Vector();//构造一个容器来存放数据
   for(int i=0;i<r;i++)
   { 
    String gs=rs.getString("dashangpin");
vt.addElement(gs);//将数据加入到容器的末尾,然后加1;
   //out.print(vt.elementAt(i));
 %>
  <div class="style1">*<%=rs.getString("dashangpin")%></div><br/>   
<%
     if(!rs.next()) break;
 } 
 session.setAttribute("vtor",vt);
 }         
catch(Exception e)
{
  out.println(e.getMessage());
  
  }
  
  try
  {
   Vector  vtor1=new Vector();
   vtor1=(Vector)session.getAttribute("vtor");//传递一个对象
   String st=(String)vtor1.elementAt(0).toString();
  //out.println(vtor1.size());
  //out.print(vtor1.elementAt(0)); 
  }
  catch(ArrayIndexOutOfBoundsException e)
  {
    out.println(e.getMessage());
   }
 ResultSet rs1=dbc.executeQuery("select * from dbo.xiaoshangpin where dashangpin='"+st2+"'");
  while(rs1.next())
  {
%>
  <div class="style1">*<%=rs1.getString("xiaoshangpin")%></div><br/>
<%}%>
编译一下:出现的问题如下:
C:\Tomcat 4.1\work\Standalone\localhost\srt\prictise_jsp.java:116: cannot resolve symbol
symbol  : variable st2 
location: class org.apache.jsp.prictise_jsp
 ResultSet rs1=dbc.executeQuery("select * from dbo.xiaoshangpin where dashangpin="+st2);

解决方案 »

  1.   

    st2改成st,另外你的习惯不好,/*结果集变量定义应该放在try块之外,并在finally块中做关闭处理*/
    ResultSet rs=dbc.executeQuery("select dashangpin from dbo.dashangpin");//执行Sql语句/*使用结果集的循环去得数据更合理而且简单,为何使用for那?
    Vector v = new Vector();
    while(rs.next()){
    String str = rs.getString("dashangpin");
    v.addElement(str);
    out.println("<div class='style1'>*"+str+"</div>");
    ///注意:结果集操作是很耗资源的,同样的数据一次取出来存到临时变量里供后面使用,不要用一次就取一次。
    }
    session.setAttribute("vtor",v);
    */
    rs.last();//将指针移动到最后一个
    int r=rs.getRow();//获得数据库的行数
    rs.absolute(1);//数据库的指针回滚到索引为1的地方;
    //rs.beforeFirst();
    Vector vt=new Vector();//构造一个容器来存放数据
    for(int i=0;i<r;i++)
    {
    String gs=rs.getString("dashangpin");
    vt.addElement(gs);//将数据加入到容器的末尾,然后加1;
    //out.print(vt.elementAt(i));
    %>
    <div class="style1">*<%=rs.getString("dashangpin")%></div><br/>
    <%
    if(!rs.next()) break;
    }
    session.setAttribute("vtor",vt);
      

  2.   

    非常的感谢steveyue(约翰岳)
    可是我把st2改过之后还是不行
    然而把同样的语句放在别的地方却可以了
    真不知道怎么办,以下是完整的代码:
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*, java.util.*" errorPage="" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <!--
        页面描述:生成一个分类树;
     参数:
     返回值:一个动态的分类树;
    -->
    <html>
    <head>
    <LINK href="css/css.css" type=text/css rel=stylesheet>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>练习做一个分类树</title>
    </head>
    <body>
    <jsp:useBean id="dbc" scope="session" class="db.dbcon" /><!--用javaBean连接数据库-->
    <jsp:include  flush="true" page="zhongwenchuli.txt"/> <%
     try
      {
       ResultSet rs=dbc.executeQuery("select  dashangpin from dbo.dashangpin");//执行Sql语句
       rs.last();//将指针移动到最后一个
       int r=rs.getRow();//获得数据库的行数
       rs.absolute(1);//数据库的指针回滚到索引为1的地方;
       //rs.beforeFirst();
       Vector vt=new Vector();//构造一个容器来存放数据
       for(int i=0;i<r;i++)
       { 
        String gs=rs.getString("dashangpin");
    vt.addElement(gs);//将数据加入到容器的末尾,然后加1;
       //out.print(vt.elementAt(i));
     %>
      <div class="style1">*<%=rs.getString("dashangpin")%></div><br/>   
    <%
         if(!rs.next()) break;
     } 
     session.setAttribute("vtor",vt);
     }         
    catch(Exception e)
    {
      out.println(e.getMessage());
      
      }
      
      try
      {
       Vector  vtor1=new Vector();
       vtor1=(Vector)session.getAttribute("vtor");//传递一个对象
       String st=(String)vtor1.elementAt(0).toString();
       // String st2="select * from dbo.xiaoshangpin where dashangpin="+st;
       //out.println(st2);
      //out.println(vtor1.size());
      //out.print(vtor1.elementAt(0)); 
      }
      catch(ArrayIndexOutOfBoundsException e)
      {
        out.println(e.getMessage());
       }
     ResultSet rs1=dbc.executeQuery("select * from dbo.xiaoshangpin where dashangpin='"+st+"'");
      while(rs1.next())
      {
    %>
      <div class="style1">*<%=rs1.getString("xiaoshangpin")%></div><br/>
    <%}%>
    </body>
    </html>
      

  3.   

    把String st= "";写在TRY的上面里面写: st=(String)vtor1.elementAt(0).toString();
      

  4.   

    变量st的作用域不一样。放在try块中定义,使用范围只在try块内,
    而你在try{}catch{}后使用了st,所以应该把st的定义放到try块之外。