首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL错误: java中的连接已关闭

SQL错误: java中的连接已关闭
EN

Stack Overflow用户
提问于 2013-04-09 04:09:39
回答 2查看 9K关注 0票数 5

即使我没有在finally块中关闭,连接也会自动关闭。

代码语言:javascript
复制
 public String look( long id, String codeName, Connection conn ) throws SQLException
    {
        try
        {
            StringBuffer sel = new StringBuffer().append(property);
            stmt = conn.prepareCall( sel.toString() );           /*   fileCode.java:194    */

            stmt.setString( 1, nameC );
            stmt.setLong( 2, valueI );
            stmt.registerOutParameter( 3, oracle.jdbc.OracleTypes.VARCHAR );
            stmt.execute();

            return stmt.getString( 3 );
        }
        catch ( SQLException e )
        {
            if ( e.getMessage().toUpperCase().contains( "NO DATA" ) )
            {
                return "Value not found";
            }
            throw e;
        }
        catch ( Exception e )
        {
            e.printStackTrace();

        }
        finally
        {
            System.out.println( " CONNNNNN closed ? : " + conn.isClosed() ); 
        }

    }

方法调用look方法,

代码语言:javascript
复制
public class Verfication 
    {   

    public void verify ( , , , , , , ,conn )
    {
      try
      {
         if ( x ==1 )
         {
           ManageCode mCode = new ManageCode();
           System.out.println( "----- 1st Call -----" );
           String mCodeBlock = mCode.look( , , conn);
           String cCodeBlocked = checkBackup ( , , , , , , , , );
           /* connection is closed in this part */ 
           System.out.println( "----- 2nd Call -----" );
           String nCodeBlock = mCode.look ( , , conn );
         }

      }catch(    )
      {

      }

    }
}   

我确实得到了下面提到的输出,我不确定连接中有什么问题?我还添加了系统输出。

OutPut:

代码语言:javascript
复制
     ----- 1st Call -----
     CONNNNNN closed ? : false

     ----- 2nd Call -----
     CONNNNNN closed ? : true

    SEVERE: Line:71 CodePointChecker ERROR: java.sql.SQLException: Closed Connection
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
    at oracle.jdbc.driver.PhysicalConnection.prepareCall(PhysicalConnection.java:839)
    at oracle.jdbc.driver.PhysicalConnection.prepareCall(PhysicalConnection.java:802)
    at com.XXXXXXXXXXXXXXX.code.fileCode.look(fileCode.java:194)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-09 04:25:59

关闭JDBC连接的原因有很多--不仅仅是您故意的。这就是为什么有这么多连接池实现的原因。

我看到过连接关闭,因为连接所通过的端口已关闭。我见过连接关闭仅仅是因为数据库感觉像这样(在这一点上,主要是使用Oracle )。

当然--最明显的可能性是你在别的地方意外地关闭了连接--可能是在另一个线程中。

道德-使用适当的连接池。它会帮你省下很多伤心事。

票数 1
EN

Stack Overflow用户

发布于 2013-04-09 04:14:56

一定是你的SQL查询触发了一个SQLException,导致连接关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15888019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档