java.sql.SQLException:第一个数据库查询后,连接已经关闭

德文德拉·辛格(Devendra singh)

我的配置是:应用程序服务器:Weblogic 10gR3数据库:Oracle 10g IDE:Netbeans Java:版本7

从池获取连接时,我面临异常。我已经尝试过使用资源来避免错误关闭连接和语句的负担。

这是堆栈跟踪。

[INFO] 2016-06-24 19:01:08,304 org.nmdc.incentivepackage.databaseFiles.DepositMDao checkData 184 - Executing query SELECT count(*) count FROM dep_m
[INFO] 2016-06-24 19:01:08,304 org.nmdc.incentivepackage.databaseFiles.DepositMDao checkData 188 - Executing query SELECT count(*) count FROM dep_m
[INFO] 2016-06-24 19:01:08,320 org.nmdc.incentivepackage.databaseFiles.DepositMDao checkData 194 - Relinquish Database connection ...
[INFO] 2016-06-24 19:01:08,320 org.nmdc.incentivepackage.databaseFiles.DepositMDao checkData 206 - return 1###success###
[INFO] 2016-06-24 19:01:08,320 org.nmdc.incentivepackage.controllerFiles.CheckDepositMDataController processRequest 35 - result 1###success###   .........save
[INFO] 2016-06-24 19:01:08,320 org.nmdc.incentivepackage.controllerFiles.CheckDepositMDataController processRequest 46 - update deposit master table 
[INFO] 2016-06-24 19:01:08,320 org.nmdc.incentivepackage.controllerFiles.GetDepositMDataController processRequest 33 - Fetching deposit master data 
[ERROR] 2016-06-24 19:01:08,320 org.nmdc.incentivepackage.databaseFiles.DepositMDao getDepositMData 239 - Exception 
java.sql.SQLException: Connection has already been closed.
at weblogic.jdbc.wrapper.PoolConnection.checkConnection(PoolConnection.java:55)
at weblogic.jdbc.wrapper.Connection.preInvocationHandler(Connection.java:92)
at weblogic.jdbc.wrapper.Connection.createStatement(Connection.java:441)
at org.nmdc.incentivepackage.databaseFiles.DepositMDao.getDepositMData(DepositMDao.java:219)
at org.nmdc.incentivepackage.controllerFiles.GetDepositMDataController.processRequest(GetDepositMDataController.java:35)
at org.nmdc.incentivepackage.controllerFiles.GetDepositMDataController.doPost(GetDepositMDataController.java:74)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3498)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

提供连接对象的DBUtility类为

public class DBUtility {
  private static Connection conn;
  private static Context ctx ;
  final static Logger logger = LoggerFactory.getLogger(DBUtility.class);

  public DBUtility() {
    ctx = null;            
    conn = null;        
  }

  public static Connection getConnection() throws Exception {
    if (conn != null)
         return conn;
    else {            
           //Hashtable ht = new Hashtable();
          // ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
         //  ht.put(Context.PROVIDER_URL,"t3://localhost:7001"); //weblogic server        
          try {                  
            ctx = new InitialContext();
            javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("incentivepool");
            conn = ds.getConnection();                
          }
          catch(Exception e) {
             logger.error("Error in establishing connection...",e);
          }
   }

   return conn;
   }
}

抛出异常的类是

ublic class DepositMDao extends HttpServlet {

private  Connection connection = null; 
final static Logger log = LoggerFactory.getLogger(DepositMDao.class); 
private String deposit,category,period,query;
private float amount;
private String errors,status;
private int errorCount;
private Statement statement;
private ResultSet rs;
JSONObject jobject; 

public DepositMDao() throws Exception {
   // connection = DBUtility.getConnection();
    if(connection != null) {
      log.info("Received Database connection ...");
    }
    errors ="";
    status = "success";
    errorCount =0;  
    statement = null;
}  
 public String checkData() throws SQLException {
    int count=0;
    query = "SELECT count(*) count FROM dep_m" ;
    log.info("Executing query "+query);
    try ( Connection connection = DBUtility.getConnection();
        Statement statement = connection.createStatement(); 
       ) {           
        log.info("Executing query "+query);
        try (ResultSet rs = statement.executeQuery(query)) {                    
            if(rs.next()) {
                count = rs.getInt("count");
            }              
         }
        log.info("Relinquish Database connection ...");
    } catch(Exception ex) {
        errorCount++;
        errors = errors + " "+ex.getMessage();
        log.error("Exception ",ex);         
    }     

    if(errorCount == 0) {
        status = "success";          
     } else {
        status = "failure";          
     }   
     log.info("return "+count+"###"+status + "###"+errors);
     return count+"###"+status + "###"+errors;
}

public List<DepositMBean> getDepositMData() throws SQLException {

 List<DepositMBean> depositList = new ArrayList();
 DepositMBean depositBean;
 String dep14,dep11C,dep11B;
 depositBean = null;
 depositList = null;   
 query = "SELECT c_dep14,c_dep11C,c_dep11B FROM dep_m ";     
 try ( Connection connection1 = DBUtility.getConnection();
        Statement statement1 = connection1.createStatement(); 
       ) 
    {           
        log.info("Executing query "+query);
        try (ResultSet rs1 = statement1.executeQuery(query)) {
            while (rs1.next()) { 
                depositBean = new DepositMBean();
                dep14 = rs1.getString("c_dep14"); 
                dep11C = rs1.getString("c_dep11C"); 
                dep11B = rs1.getString("c_dep11B");

                depositBean.setcDep14(dep14);
                depositBean.setcDep11B(dep11B);
                depositBean.setcDep11C(dep11C);            
                depositList.add(depositBean);            
            }    
            depositBean.display();
            log.info("Relinquish Database connection ...");
        } 
    } catch(Exception ex ) {
      log.error("Exception ",ex);         
  }  
 return depositList;     
}   

服务器上的池配置为:

配置1

配置2

CSK

因为连接是静态对象,这意味着只能存在一个连接实例。

private static Connection conn

因此您第一次调用它就可以了,但是第二次却没有用,因为连接已经关闭。

如果连接已关闭,则需要重新创建连接

if (conn != null && !conn.isClosed())
     return conn;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

java.sql.SQLException: 连接关闭后不允许操作。数据库:mysql

来自分类Dev

从sql数据库获取后缺少第一个结果

来自分类Dev

为什么我得到java.sql.SQLException:ResultSet未打开。不允许执行“下一个”操作。java derby数据库?

来自分类Dev

连接SQL查询返回第一个表

来自分类Dev

如何在SQL数据库中选择第一个奇数/偶数主键

来自分类Dev

SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

来自分类Dev

SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

来自分类Dev

java.sql.SQLException:无法从基础数据库获取连接!— HSQLDB

来自分类Dev

尝试连接到Oracle数据库时出现java.sql.SQLException

来自分类Dev

尝试连接到Oracle数据库时出现java.sql.SQLException

来自分类Dev

SQL 查询:将数据从一个数据库移动到另一个数据库

来自分类Dev

将另一个数据库加入SQL查询

来自分类Dev

为什么我的SQL查询在一个数据库中这么慢?

来自分类Dev

使用oracle sql developer从一个数据库复制到另一个数据库-连接失败

来自分类Dev

使用oracle sql developer从一个数据库复制到另一个数据库-连接失败

来自分类Dev

Java - 从 sql 数据库中保存和/或检索一个字节

来自分类Dev

一个 Web 应用程序中的多个数据库连接 - java

来自分类Dev

java.sql.SQLException:连接已关闭

来自分类Dev

java.sql.SQLException:连接已关闭

来自分类Dev

一个SQL查询可访问Java中的多个数据源(来自oracle,excel,sql server)

来自分类Dev

java.sql.SQLException:未选择数据库

来自分类Dev

SQL 数据库连接中的 java.sql.SQLSyntaxErrorException

来自分类Dev

首次连接到Netbeans SQL数据库-java.sql.SQLException:找不到合适的驱动程序0 08001

来自分类Dev

java数据库连接最终以db:java.sql.SQLException:未找到合适的驱动程序

来自分类Dev

java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接

来自分类Dev

如何连接一个SQL数据库和没有SQL数据库?

来自分类Dev

我正在尝试从android中的SQL数据库获取第一个Min值

来自分类Dev

在第一个单元格中输入数据后,宏在循环中运行SQL查询(104次)

来自分类Dev

从另一个数据库更新SQL Server数据库

Related 相关文章

  1. 1

    java.sql.SQLException: 连接关闭后不允许操作。数据库:mysql

  2. 2

    从sql数据库获取后缺少第一个结果

  3. 3

    为什么我得到java.sql.SQLException:ResultSet未打开。不允许执行“下一个”操作。java derby数据库?

  4. 4

    连接SQL查询返回第一个表

  5. 5

    如何在SQL数据库中选择第一个奇数/偶数主键

  6. 6

    SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

  7. 7

    SQL:如何在更新第一个数据库中的表时自动在第二个数据库中更新表?

  8. 8

    java.sql.SQLException:无法从基础数据库获取连接!— HSQLDB

  9. 9

    尝试连接到Oracle数据库时出现java.sql.SQLException

  10. 10

    尝试连接到Oracle数据库时出现java.sql.SQLException

  11. 11

    SQL 查询:将数据从一个数据库移动到另一个数据库

  12. 12

    将另一个数据库加入SQL查询

  13. 13

    为什么我的SQL查询在一个数据库中这么慢?

  14. 14

    使用oracle sql developer从一个数据库复制到另一个数据库-连接失败

  15. 15

    使用oracle sql developer从一个数据库复制到另一个数据库-连接失败

  16. 16

    Java - 从 sql 数据库中保存和/或检索一个字节

  17. 17

    一个 Web 应用程序中的多个数据库连接 - java

  18. 18

    java.sql.SQLException:连接已关闭

  19. 19

    java.sql.SQLException:连接已关闭

  20. 20

    一个SQL查询可访问Java中的多个数据源(来自oracle,excel,sql server)

  21. 21

    java.sql.SQLException:未选择数据库

  22. 22

    SQL 数据库连接中的 java.sql.SQLSyntaxErrorException

  23. 23

    首次连接到Netbeans SQL数据库-java.sql.SQLException:找不到合适的驱动程序0 08001

  24. 24

    java数据库连接最终以db:java.sql.SQLException:未找到合适的驱动程序

  25. 25

    java.sql.SQLRecoverableException:从Oracle数据库接收blob字段期间关闭了连接

  26. 26

    如何连接一个SQL数据库和没有SQL数据库?

  27. 27

    我正在尝试从android中的SQL数据库获取第一个Min值

  28. 28

    在第一个单元格中输入数据后,宏在循环中运行SQL查询(104次)

  29. 29

    从另一个数据库更新SQL Server数据库

热门标签

归档