代码之家  ›  专栏  ›  技术社区  ›  Manuel Selva

是否有任何工具或技术来识别打开的结果集

  •  2
  • Manuel Selva  · 技术社区  · 14 年前

    在Java应用程序使用的上下文中 SQLIte 为了持久化数据,我使用 Zentus JDBC驱动程序。因此我使用 java.sql 用于访问我的数据库的包。

    我面临一些奇怪的问题(在同一数据库上有多个连接对象的环境中),我确信我的问题来自于非封闭的结果集。

    是否有任何工具或技术允许我找出在源代码中查找这些非闭合对象的位置?

    编辑 可能正在使用 AspectJ ??

    4 回复  |  直到 14 年前
        1
  •  3
  •   Dave    14 年前

    execution(public java.sql.ResultSet+ java.sql.Statement+.*(..))
    

    execution(public * java.sql.ResultSet.close())
    

        2
  •  2
  •   Andreas Dolk    14 年前

     ResultSet rs = stmt.executeQuery(query);
     Util.writeln(rs.hashcode() + ";create"); // add this line whenever a 
                                             // new ResultSet is created
    

     rs.close();
     Util.writeln(rs.hashcode() + ";closed"); // add this line whenever a 
                                             // ResultSet is closed
    


    public MonitoredConnection implements Connection {
      Connection wrappedConnection = null;
    
      public MonitoredConnection(Connection wrappedConnection) {
        this.wrappedConnection = wrappedConnection;
      }
    
      // ... implement interface methods and delegate to the wrappedConnection
    
      @Override
      public Statement createStatement() {
        // we need MonitoredStatements because later we want MonitoredResultSets
        return new MonitoredStatement(wrappedConnection.createStatemet());
      }
    
      // ...
    }
    

    public MonitoredStatement implements Statement {
      private Statement wrappedStatement = null;
    
      @Override 
      public ResultSet executeQuery(String sql) throws SQLException
         MonitoredResultSet rs = wrappedStatement.executeQuery(sql);
         ResultSetMonitor.create(rs.getWrappedResultSet()); // some static utility class/method
         return rs;
      }
    
      // ...
    }
    

    public MonitoredResultSet implements ResultSet {
      private ResultSet wrappedResultSet;
    
      @Override 
      public void close() {
         wrappedResultSet.close();
         ResultSetMonitor.close(wrappedResultSet); // some static utility class/method
      }
    
      // ...
    }
    

    Connection con = DriverManager.getConnection(ur);
    

    Connection con = new MonitoredConnection(DriverManager.getConnection(ur));
    
        3
  •  1
  •   Buhake Sindi Tesnep    14 年前

    Google Search JAMon It

    PreparedStatement ps = null;
    ResultSet rs = null;
    UserRequest request = null;
    
    try {
     ps = getConnection().prepareStatement(SQL_RETRIEVE);
     ps.setLong(1, id);
     rs = ps.executeQuery();
     if (rs != null && rs.next()) {
      request = mapEntity(rs);
     }
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     throw new DAOException(e);
    } finally {
     try {
      close(rs, ps);
     } catch (SQLException e) {
      // TODO Auto-generated catch block
      logger.error("Error closing statement or resultset.", e);
     }
    }
    

        4
  •  1
  •   maximdim    14 年前