public int executeUpdate(String sql)
{
     int rowCount=0;
     rs=null;

    try
    { 
      conn= DriverManager.getConnection(url,user,password);
      Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
       rowCount=0;
       rowCount=stmt.executeUpdate(sql);
     }
     catch(Exception ex)
     {
System.err.println("db,excuteUpdate:"+ex.getMessage());
System.out.print("false:");//输出到客户端
return 0;
     }

    return 1;
}
以上是我定义个一个javabean中的一段代码,
我在jsp文件中调用这个函数来实现sql数据库中记录的插入。
问题是:
我每次都已经成功的把记录插入到数据库的表中了,
但是这个函数的返回值经常是0,很少返回1;
这是怎么回事啊,记录已经插入数据库那不是表示没有出现异常嘛,应该return 1啊,怎么还会去执行catch里面的程序,而且,也不是每次插入成功都执行catch里的代码的。

解决方案 »

  1.   

    信息太少了.
    不过如果执行catch里的语句,那么就一定是抛异常了.你再好好找找.
    如果想问问题的话,最好能多贴点信息出来.要学学问问题的艺术
      

  2.   

    System.err.println("db,excuteUpdate:"+ex.getMessage());
    前面加一句ex.printStackTrace();看看是不是有异常,你把异常打到err上去了,不一定看得到的
      

  3.   

    补充:
    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>
      

  4.   

    肯定会有异常的,连接都没有关闭!!最好写个finally
      

  5.   

    我加了finally,里面写stmt.close();conn.close();
    可是编译有两个错误
    E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\dbshow\Sdb1.java:77: unreported exception java.sql.SQLException; must be caught or declared to be thrown
        stmt.close();
    E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\dbshow\Sdb1.java:78: unreported exception java.sql.SQLException; must be caught or declared to be thrown 
        conn.close();
      

  6.   

    System.err.println("db,excuteUpdate:"+ex.getMessage());
    这句打出的信息是什么呢?
      

  7.   

    finally里 也要加try catch
    修改成以下方式
    catch(Exception ex)
    {
    System.err.println("db,excuteUpdate:"+ex.getMessage());
    System.out.print("false:");//输出到客户端
    return rowCount;
    }return rowCount;
    }
      

  8.   

    直接return rowCount;也可以
    public int executeUpdate(String sql)
    {
    int rowCount=0;
    rs=null;try
    {
    conn= DriverManager.getConnection(url,user,password);
    Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    rowCount=0;
    rowCount=stmt.executeUpdate(sql);
    }
    catch(Exception ex)
    {
    System.err.println("db,excuteUpdate:"+ex.getMessage());
    System.out.print("false:");//输出到客户端
    }return rowCount;
    }
      

  9.   

    Sdb1,excuteUpdate:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__Students__7A9C383C'。不能在对象 'Students' 中插入重复键。java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__Students__7A9C383C'。不能在对象 'Students' 中插入重复键。
      

  10.   

    System.err.println("db,excuteUpdate:"+ex.getMessage());
    建议在开发期间。将getMessage();换成ex.printStackTrace();
    ...................................
      

  11.   

    getMessage();不能换成ex.printStackTrace();的吧,ex.printStackTrace();是void
      

  12.   

    你那个false是不是在返回0的时候也打出来了?如果是的话,那就绝对是有异常发生了。
      

  13.   

    是有异常发生了啊,描述如下
    Sdb1,excuteUpdate:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__Students__7A9C383C'。不能在对象 'Students' 中插入重复键。java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]违反了 PRIMARY KEY 约束 'PK__Students__7A9C383C'。不能在对象 'Students' 中插入重复键。
    但是怎么会这样呢,插入成功了啊,他怎么判断出是有重复键的