簡體   English   中英

executeUpdate() 總是返回 1

[英]executeUpdate() always returns 1

我正在嘗試通過對 servlet 的 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 retrieving Server Details]"+e.getMessage());
        throw e;
    }
     return ret;
  }

有時它返回值為0 ,但這種情況很少見。 但是一旦它返回0它總是給出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很可能是您表的主鍵,因此您永遠看不到任何其他值是絕對可以的。

注意:您可以更新 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 retrieving Server Details]"+e.getMessage());
 }
 return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM