声明已经结束

时间:2015-05-26 19:00:35

标签: java spring hibernate jdbc weblogic

我有一个问题,在开发服务器上运行(运行Weblogic 10.3.6),运行一个进程会导致:

 java.sql.SQLException: Statement has already been closed

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

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

任何人都可以提供故障排除提示吗?

2 个答案:

答案 0 :(得分:1)

如果你发布完整的堆栈跟踪,它将很容易回答。但我会给你解决方案的建议。对于我的练习java.sql.SQLException: Statement has already been closed表示您的Statement超时。当语句超时时,您将获得前面的异常。以下内容将帮助您了解如何配置Statement超时等。
http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html

答案 1 :(得分:0)

此外,您必须注意关闭并初始化Statment,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();
          }
       }
    }
 }

我希望此信息可以帮助您

祝你好运。