student.jsp是输入要插入的记录的页面,输入信息完毕后,在该页面上点击新增按钮,提交到smid.jsp中进行插入记录到数据库的处理,使用javabean执行sql语句,在smid.jsp中定义String insert来标记是否插入成功。插入完毕后,重定向回student.jsp,并且将insert的值也传到student.jsp以下是smid.jsp,上半部分是插入按钮的处理
<jsp:useBean id="sdb" class="jbean.Sdb1" scope="request"/>
<jsp:setProperty name="sdb" property="*"/>
<body><% 
String insert="true";
String sno=sdb.toChinese(request.getParameter("sno"));
String sname=sdb.toChinese(request.getParameter("sname"));
String dept=sdb.toChinese(request.getParameter("dept"));
String starttime=sdb.toChinese(request.getParameter("starttime"));
String sql="";
ResultSet check=null;if(request.getParameter("tvalue")!=null)
{
    if(request.getParameter("tvalue").equals("x"))//插入记录
    { if(sno!=null)
      { if(!sno.equals(""))
         {    //查询数据库中是否已经存在该学号的记录信息
               String str="select * from Students where Sno='"+sno+"'";
          check=sdb.executeQuery(str);      if(check.next())
     {    insert="yicunzai"; }
     else
     {    //数据库中还没有该学号的记录,可以插入
 sql="insert into Students(Sno,Sname,DeptNo,StartDate,CreditHours) values('"+sno+"','"+sname+"','"+dept+"','"+starttime+"',0)";
insert=String.valueOf(sdb.executeUpdate(sql));
      } }
 else
{
    insert="youkongzhi";
 }
       }
       response.sendRedirect("student.jsp?xvalue="+insert);
    }
   else 
   { if(request.getParameter("tvalue").equals("y"))//删除记录
      {
  String cbox=request.getParameter("cbox");
  if(cbox!=null)//复选框选中了
  {
String  va[]=request.getParameterValues("cbox");  int len=java.lang.reflect.Array.getLength(va);
if(len>=1)
{
     String sql2="";     for(int i=0;i<len;i++)
         {//先删除成绩表中的相应记录
sql2="delete  from Reports where Sno='"+va[i]+"'";
int bupdate2=sdb.executeUpdate(sql2);
sql="delete  from Students where Sno='"+va[i]+"'";
int bupdate=sdb.executeUpdate(sql);
      }

    }
 response.sendRedirect("student.jsp");
        }
    }//response.setHeader("Refresh","0.0001");}
else
{response.sendRedirect("student.jsp");
}%></body>当我输入可以插入数据库的记录信息时,正常的情况是记录成功插入数据库,并且insert=String.valueOf(sdb.executeUpdate(sql));奇怪的是,有时候我输入的记录信息是可以插入数据库的,原来的数据库中并不存在该记录,但是程序在执行时有时后却会执行if(check.next())里的代码,使insert=“已存在”;同时与这个if相对应的else里的代码也会执行,将记录成功插入数据库。好像是先执行else里的代码再执行if里的代码的,因为最后重定向回student.jsp时传递过去的insert的值是“yicunzai”

解决方案 »

  1.   

    你的逻辑有问题,回存在既执行if又执行else的情况吗?而且是先执行else后执行if ?????
      

  2.   

    重定向回student.jsp,并且将insert的值也传到student.jsp
    ---------------------------------------------------------
    重定向到一个新的页面,也许你查找问题的时候能清晰一些
      

  3.   

    上来就System.out.println("xxx"),看看tomcat的console上打出来几次?
      

  4.   

    我是用dreamweaver做的,eclipse不会的
      

  5.   

    System.out.println("xxx"),tomcat的console显示有时打出来一次,有时两次,为什么会这样啊
      

  6.   

    lz代码里的大括号的方式看得我累死了。
    晕ing...
      

  7.   

    我把lz的代码稍微重排一下,方便楼下的兄弟看:
    <jsp:useBean id="sdb" class="jbean.Sdb1" scope="request"/>
    <jsp:setProperty name="sdb" property="*"/>
    <body><% 
    String insert="true";
    String sno=sdb.toChinese(request.getParameter("sno"));
    String sname=sdb.toChinese(request.getParameter("sname"));
    String dept=sdb.toChinese(request.getParameter("dept"));
    String starttime=sdb.toChinese(request.getParameter("starttime"));
    String sql="";
    ResultSet check=null;if(request.getParameter("tvalue")!=null)
    {
        if(request.getParameter("tvalue").equals("x"))//插入记录
        { 
            if(sno!=null)
            { 
                if(!sno.equals(""))
                {
                    //查询数据库中是否已经存在该学号的记录信息
                    String str="select * from Students where Sno='"+sno+"'";
                    check=sdb.executeQuery(str);                if(check.next())
                    {
                        insert="yicunzai"; 
                    }
                    else
                    {
                        //数据库中还没有该学号的记录,可以插入
                        sql="insert into Students(Sno,Sname,DeptNo,StartDate,CreditHours) values('"+sno+"','"+sname+"','"+dept+"','"+starttime+"',0)";
                        insert=String.valueOf(sdb.executeUpdate(sql));
                    }            }
                else
                {
                    insert="youkongzhi";
                }
            }
            response.sendRedirect("student.jsp?xvalue="+insert);
        }
        else 
        { 
            //删除记录
            if(request.getParameter("tvalue").equals("y"))
            {
                String cbox=request.getParameter("cbox");            //复选框选中了
                if(cbox!=null)
                {
                    String  va[]=request.getParameterValues("cbox");                  int len=java.lang.reflect.Array.getLength(va);
                    if(len>=1)
                    {
                        String sql2="";                    for(int i=0;i<len;i++)
                        {
                            //先删除成绩表中的相应记录
                            sql2="delete  from Reports where Sno='"+va[i]+"'";
                            int bupdate2=sdb.executeUpdate(sql2);
                            sql="delete  from Students where Sno='"+va[i]+"'";
                            int bupdate=sdb.executeUpdate(sql);
                        }
                    } 
                }
                response.sendRedirect("student.jsp");
            }
        }    //response.setHeader("Refresh","0.0001");
    }
    else
    {
        response.sendRedirect("student.jsp");
    }%>
      

  8.   

    应该是刷新了两次smid的缘故,可是怎么会这样的呢
      

  9.   

    解释的还不够啊,反正是不知道为什么,会重复执行smid.jsp有时连调用javabean的方法也会重复执行一次
      

  10.   

    晕,都什么年代了,还在jsp里写scriptlet.
    早就流行用label了.
      

  11.   

    完全自学jsp,周围也几乎没有人可以请教,就算有,也都是答非所问,我都快绝望了,
    在加上借的几本书都是这么写的,也没有很多时间学,你说我怎么知道现在流行怎么写啊,
    求你们就别再说这个了,
    帮忙解决下我的问题吧