首页 文章

executeUpdate()始终返回1

提问于
浏览
1

我试图通过AJAX调用从JSP页面编辑行到servlet,这进一步转到编辑函数,但 k 的值始终为1 .

这是servlet代码:

try {
            k=obj.editportal(env, region, url, user, rnode, password,envid,attuid);
        } catch (Exception e) {

            e.printStackTrace();
        }

        System.out.println("value of k is = "+k);

         if(k==0)
          {
            res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            pw.write("Internal server error");
          } 
         else if(k==1)
          {
            res.setStatus(HttpServletResponse.SC_OK);
            pw.write("Row updated Successfully");          
          }

这是我的Java函数:

try {
      Connection con = db.getConnection();
      String query = "update ENV_MOTS_DETAILS set " +
            "ENV_NAME= ? , CONSOLE_URL= ? , REMOTE_NODE= ? , CONSOLE_TO_LOGON=? , " +
            "REGION=? , DELETE_FLAG='Y' , ADMIN_PWD=? , " +
            "COMPONENT='' , COMMENTS='' , LAST_UPDATED_BY=?, " +
            "LAST_UPDATED_ON=to_date(to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') WHERE ENV_ID = ?";

      log.info("[Editconsole Method Call Query]"+query);

      ps = con.prepareStatement(query);

      ps.setString(1,env);
      ps.setString(2,url);
      ps.setString(3,rnode);
      ps.setString(4,user);
      ps.setString(5,region);
      ps.setString(6,password);
      ps.setString(7,attuid);
      ps.setInt(8,envid);

      ret=ps.executeUpdate();

      ps.close();
      //con.commit();
      con.close();

    } 
     catch (Exception e) 
     {
        log.fatal("[SQL Exception in Retreving Server Details]"+e.getMessage());
        throw e;
    }
     return ret;
  }

有时它会给出返回值 0 ,但这种情况很少见 . 但是一旦它返回 0 ,它总是给出 0 ,即使我重新输入正确的条目,

1 回答

  • 0

    您的错误 java.sql.SQLException: ORA-12899: value too large for column "INFRAJEWL"."ENV_MOTS_DETAILS_NEW"."ADMIN_PWD" 是由

    ps.setString(6,password);
    

    password 中包含一个字符串,该字符串比表中的 ADMIN_PWD 列长,定义为保留 .

    检查表定义并检查 password 长度 .

    返回值0只表示:没有更新行,而返回值1表示更新了"1"行 . 由于你的 ENV_ID 很可能是你 table 的主键,所以你绝对没有看到任何其他值 .

    Note: 您可以更新0行并且语句正常工作 . 当更新没有更改数据时会出现这种情况(与以前相同的值)

    通过编写 try-with-resource 样式,您可以删除对变量 ret 的依赖,在异常的情况下更多地返回0:

    String query = "update ENV_MOTS_DETAILS set " +
            "ENV_NAME= ? , CONSOLE_URL= ? , REMOTE_NODE= ? , CONSOLE_TO_LOGON=? , " +
            "REGION=? , DELETE_FLAG='Y' , ADMIN_PWD=? , " +
            "COMPONENT='' , COMMENTS='' , LAST_UPDATED_BY=?, " +
            "LAST_UPDATED_ON=to_date(to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') WHERE ENV_ID = ?";
    
    try(Connection con = db.getConnection();      
         ps = con.prepareStatement(query)) {
      log.info("[Editconsole Method Call Query]"+query);
    
      ps.setString(1,env);
      ps.setString(2,url);
      ps.setString(3,rnode);
      ps.setString(4,user);
      ps.setString(5,region);
      ps.setString(6,password);
      ps.setString(7,attuid);
      ps.setInt(8,envid);
    
      int numAffected = ps.executeUpdate();
      log.info("Statement affected " + numAffected + " rows");
      return 1; //Worked.
    
     } 
     catch (Exception e)  {
        log.fatal("[SQL Exception in Retreving Server Details]"+e.getMessage());
     }
     return 0;
    }
    

相关问题