下面这个是我发过的一个贴 一个好心人跟我说有触发器,我查了一下果然有触发器。
我的问题是我用JDBC连接SQL2005中有一个update方法 就是修改readers表.....
String sql="update readers set rName='"+rName+"' ,rtype="+rType+" where rno='"+rNo+"'";
System.out.println(sql);
PreparedStatement stmt=con.prepareStatement(sql);
int rtn=stmt.executeUpdate();//对于返回两个结果的语句来说 不起作用 暂时未解决
if(rtn==1){
System.out.println("更新: "+rName+" 成功");
}else{
System.out.println("更新失败!");
}
.....我想用返回值rtn来判断是否更新成功,但是就像下面的一样 rtn只会等于上面的那个0,而不会是下面的1,请问我在不删除触发器的
前提下怎么处理这个问题,谢谢!--------------以前的问题-------------------
我数据库中有张表为reader(读者信息表) 有3个字段:rNo,rName,rType 
现在我根据rno来更改reader的信息,语句执行正确。 但为什么返回结果有两句? 
希望知情的跟我说一下,谢谢! 
update readers set rName='真的爱你' ,rtype=3 where rno='Z07041353'
结果为: (0 行受影响) (1 行受影响)————————————————

解决方案 »

  1.   

    readers 這個表有觸發器吧.
      

  2.   

    executeUpdate 的返回值总为零,
    如果有返回值,可试试这样
    --大体上String sql="update readers set rName='"+rName+"' ,rtype="+rType+" where rno='"+rNo+"'";
                System.out.println(sql);
                PreparedStatement stmt=con.prepareStatement(sql);
                int rtn=stmt.execute(sql);//对于返回两个结果的语句来说 不起作用 暂时未解决
                  int rowCount = stmt.getUpdateCount(); 
                if(rowCount >=1){
                    System.out.println("更新: "+rName+" 成功");
                }else{
                    System.out.println("更新失败!");
                }
      

  3.   

    那就把觸發器停用alter table readers 
    disable  trigger 觸發器名稱
    ------------------
    下麵是啟用觸發器
    alter table readers 
    enable trigger 觸發器名稱
      

  4.   

    你的触发器可以修改不?可以修改触发器执行查询语句后不返回影响的行数set nocount on
      update tb set col=xxx where col=yyy
    set nocount off
      

  5.   


    String sql="update readers set rName='"+rName+"' ,rtype="+rType+" where rno='"+rNo+"';select 1;";
                System.out.println(sql);
                PreparedStatement stmt=con.prepareStatement(sql);
                int rtn=(int)stmt.executeScalar();
                if(rtn==1){
                    System.out.println("更新: "+rName+" 成功");
                }else{
                    System.out.println("更新失败!");
                }
      

  6.   

    int rtn=stmt.executeUpdate();
    这种用法本来就有问题,应该try ... catch
    不出错就成功
      

  7.   

    我试了一下 结果跟 int rtn=stmt.executeUpdate()的结果是一样的
      

  8.   


    我的处罚期可以修改 不知道怎么修改]
    没有看明白是什么意思  能详细一点吗?...
    on [dbo].[readers]
    for update
    as
    declare @rnoBeforeModify char(10),
    @rnoAfterModify char(10)

    select @rnoBeforeModify=rno from deleted --获取修改前的学号
    select @rnoAfterModify=rno from inserted
    update  borrowinf set rno=@rnoAfterModify where rno=@rnoBeforeModify
      

  9.   

    ...
    on [dbo].[readers]
    for update
    as
    declare @rnoBeforeModify char(10),
            @rnoAfterModify char(10)
        
    set nocount on select @rnoBeforeModify=rno from deleted --获取修改前的学号
    select @rnoAfterModify=rno from inserted
    update  borrowinf set rno=@rnoAfterModify where rno=@rnoBeforeModifyset nocount off