java - executeUpdate() 只给出返回值 1

标签 java database

我之前也问过同样的问题,没有得到答案 我正在从前端更新数据库中的一行,但我总是得到返回值为 1 无论查询是否正在更新,我故意尝试插入错误的值或尝试违反约束,我在后端收到异常,但返回值始终为 1

java代码:

 public int editportal(String env,String region,String url,String user,String rnode,String password,int envid,String attuid) throws Exception
   {
    int Affected=0; 
    log.debug("[Editconsole Method Call]");

     try {
      Connection con = db.getConnection();
      String editquery = "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]"+editquery);

      PreparedStatement ps1 = con.prepareStatement(editquery);

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

     Affected = ps1.executeUpdate();

     log.info("Statement affected " + Affected + " rows");
     ps1.close();
     con.close();

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

      }
    return Affected;      
 }

当我故意尝试获取错误或返回值为 0 时的堆栈跟踪

java.sql.SQLException:ORA-12899:列“INFRAJEWL”的值太大。“ENV_MOTS_DETAILS”。“ADMIN_PWD”(实际:147,最大值:50)

    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
    at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
    at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
    at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
    at com.amdocs.infraportal.query.GetServerInfoDao.editportal(GetServerInfoDao.java:202)
    at com.amdocs.infraportal.servlets.Edit.doPost(Edit.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)

最佳答案

查看 executeUpdate() 的文档。它的返回值不应用于确定更新是否成功。

关于java - executeUpdate() 只给出返回值 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35084226/

相关文章:

java - OSM 和 A* 算法

sql - 伪SQL?名字和姓氏重复但城市不同的所有记录?

ios - 如何创建 Sqlite3 数据库 - IOS

sql - 普通英语规范化

java - 什么时候使用 Wea​​kHashMap 或 WeakReference?

java - hibernate 保存并使用相同的 session ,相同的事务

java - 如何定义具有行时间属性的 apache flink 表

java - Axis Java Web 服务 : connect to database on startup

mysql - 如何在 MySQL 中查询以下内容?

android - 文件已加密或不是数据库(异常 net.sqlcipher.database.SQLiteException)