Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对账单已关闭_Java_Spring_Hibernate_Jdbc_Weblogic - Fatal编程技术网

Java 对账单已关闭

Java 对账单已关闭,java,spring,hibernate,jdbc,weblogic,Java,Spring,Hibernate,Jdbc,Weblogic,我遇到一个问题,在开发服务器(运行Weblogic 10.3.6)上,运行进程会导致以下情况: java.sql.SQLException: Statement has already been closed 所有数据库操作(主要是插入/更新)仍然会发生,并且看起来是正确的。但是,在我自己的工作站上的本地实例中运行不会触发该异常 此代码应用程序运行Spring和Hibernate,触发代码在编程事务中运行 有人能提供故障排除的想法吗?如果你发布完整的stacktrace,答案将非常简单。但我

我遇到一个问题,在开发服务器(运行Weblogic 10.3.6)上,运行进程会导致以下情况:

 java.sql.SQLException: Statement has already been closed
所有数据库操作(主要是插入/更新)仍然会发生,并且看起来是正确的。但是,在我自己的工作站上的本地实例中运行不会触发该异常

此代码应用程序运行Spring和Hibernate,触发代码在编程事务中运行


有人能提供故障排除的想法吗?

如果你发布完整的stacktrace,答案将非常简单。但我会给你一些解决问题的建议。对于我的实践
java.sql.SQLException:Statement已经关闭
意味着您的
语句
超时。当语句超时时,您将得到前面的异常。以下内容将帮助您配置
语句
超时等。

此外,您必须注意关闭并初始化station、ResultSet和Connection,这些问题可能会导致不良行为,例如,您可能会遇到以下情况:

Connection conn = null;
PreparedStatement ps = null;

try {
   conn = getConnection ();
   for (TableBean tableBean : listTableBean) {
      ps = conn.prepareStatement ("INSERT INTO table (id, desc) values (?, ?)");
      ps.setInt (1, tableBean.getId());
      ps.setString (2, tableBean.getDesc());
      ps.executeUpdate();
   }
} catch (SQLException e) {
   e.printStackTrace();
} finally {
   try {
      if (ps != null) {
         ps.close();
      }
   } catch (SQLException e) {
      e.printStackTrace();
   } finally {
      try {
         if (conn != null) {
            conn.close();
         }
      } catch (SQLException e) {
         e.printStackTrace();
      }
   }
}
您可以看到,
ps
在循环结束之前不会关闭,因此数据库可能会抛出超时错误,因为在这种情况下 数据库负责关闭会话。必要时最好关闭会话

 Connection conn = null;
 PreparedStatement ps = null;
 for (TableBean tableBean : listTableBean) {
    try {
       conn = getConnection ();
       ps = conn.prepareStatement ("INSERT INTO table (id, desc) values (?, ?)");
       ps.setInt (1, tableBean.getId());
       ps.setString (2, tableBean.getDesc());
       ps.executeUpdate();
    } catch (SQLException e) {
       e.printStackTrace();
    } finally {
       try {
          if (ps != null) {
             ps.close();
          }
       } catch (SQLException e) {
          e.printStackTrace();
       } finally {
          try {
             if (conn != null) {
                conn.close();
             }
          } catch (SQLException e) {
             e.printStackTrace();
          }
       }
    }
 }
我希望这些信息对你有帮助


祝你好运。

请包括stacktrace和触发此异常的代码。通常错误意味着在使用
close()
关闭语句后执行操作。问题是我使用的是Spring/Hibernate组合,而不是直接使用JDBC。因此,所有的连接和声明工作都由我来完成。