Java executeUpdate()始终返回1

Java executeUpdate()始终返回1,java,oracle,jdbc,Java,Oracle,Jdbc,我试图通过对servlet的AJAX调用来编辑JSP页面中的行,该servlet进一步转到编辑函数,但是k的值始终为1 以下是servlet代码: try { k=obj.editportal(env, region, url, user, rnode, password,envid,attuid); } catch (Exception e) { e.printStackTrace();

我试图通过对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:值对于“INFRAJEWL”列太大。“ENV_MOTS_DETAILS_NEW”。“ADMIN_PWD”
是由

 ps.setString(6,password);
password
中包含一个比表中的
ADMIN\u PWD
列长的字符串,则定义为保留

检查表定义并检查密码长度

返回值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;
}

您的错误
java.sql.SQLException:ORA-12899:列“INFRAJEWL”“ENV\u MOTS\u DETAILS\u NEW”“ADMIN\u PWD”
的值太大是由于

 ps.setString(6,password);
password
中包含一个比表中的
ADMIN\u PWD
列长的字符串,则定义为保留

检查表定义并检查密码长度

返回值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;
}


所以
ret
也是0/1?顺便说一句,因为
k==0
会指示一个错误(虽然不太正确),所以可能没有“错误”,即更新工作。当k为0时,则检查是否打印stacktrace,即,如果出现异常,则打印stacktrace,并继续使用在try块之前的k值(我假设为0)。在不正确的sql上,k值通常为1,但在不需要双类型转换的情况下,很少给出0;您只需使用
sysdate
更新日期即可column@thomas .. 我在日志中有一个堆栈跟踪,其中日志中存在异常
,但k=1
,因此
ret
也是0/1?顺便说一句,因为
k==0
将指示错误(虽然不完全正确),那么可能没有“错误”,即更新工作。当k为0时,则检查是否打印stacktrace,即,如果出现异常,则打印stacktrace,并继续使用在try块之前的k值(我假设为0)。在不正确的sql上,k值通常为1,但在不需要双类型转换的情况下,很少给出0;您只需使用
sysdate
更新日期即可column@thomas .. 我在日志中有一个堆栈跟踪,其中日志中有异常
,但k=1
这正是我想要的。。。当我输入一个较大的值时,我想要0,但我总是将返回值设为1,这意味着即使在更新0行时,我也可以将返回值设为1?缺少太多的代码,无法对此给出一个声明-但我给出的代码可以做到:在SQL错误时返回0,在接受SQL语句时返回1(无论它是否更改了任何内容)你找到解决办法了吗?还需要帮助吗?我没有..这个问题是原来的..在带有glassfish服务器的netbeans上测试的..相同的问题。。。返回值为1,即使有异常..20次中有4次是正确的这正是我想要的。。。当我输入一个较大的值时,我想要0,但我总是将返回值设为1,这意味着即使在更新0行时,我也可以将返回值设为1?缺少太多的代码,无法对此给出一个声明-但我给出的代码可以做到:在SQL错误时返回0,在接受SQL语句时返回1(无论它是否更改了任何内容)你找到解决办法了吗?还需要帮助吗?我没有..这个问题是原来的..在带有glassfish服务器的netbeans上测试的..相同的问题。。。返回值为1,即使有异常。20次中有4次是正确的