首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

超奇怪,if和else里的代码都被执行了解决方案

2012-01-08 
超奇怪,if和else里的代码都被执行了student.jsp是输入要插入的记录的页面,输入信息完毕后,在该页面上点击

超奇怪,if和else里的代码都被执行了
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”


[解决办法]
不可能,估计是页面又被刷了一次,第一次插入了,第二次当时是已存在
[解决办法]
重定向回student.jsp,并且将insert的值也传到student.jsp
---------------------
重定向到一个新的页面,也许你查找问题的时候能清晰一些
[解决办法]
上来就System.out.println( "xxx "),看看tomcat的console上打出来几次?
[解决办法]
我把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 ");
}

%>

[解决办法]
是某个地方用提交函数

热点排行