private void executeUpdateSql(
      String totalSql,
      Connection conn,
      int sqlParamCount,
      IInputOptionListHandler inputOptionListHandler)
      throws SQLException {

    PreparedStatement stmt = conn.prepareStatement(totalSql);

    System.out.println(totalSql + " [ " + sqlParamCount + " ]");
    if (inputOptionListHandler.isCollectionId()) {
      for (int i = 1; i <= sqlParamCount; i++) {
        stmt.setInt(i, Integer.parseInt(inputOptionListHandler.getCollectionId()));
      }
    }

    stmt.executeUpdate();
  }
  public EventSet getVisitByFact(
      List<String> panelSqlList,
      List<Integer> sqlParamCountList,
      IInputOptionListHandler inputOptionListHandler,
      boolean detailFlag,
      boolean blobFlag,
      boolean statusFlag)
      throws I2B2DAOException {

    EventSet eventSet = new EventSet();
    I2B2PdoFactory.EventBuilder eventBuilder =
        new I2B2PdoFactory().new EventBuilder(detailFlag, blobFlag, statusFlag);
    VisitFactRelated eventFactRelated =
        new VisitFactRelated(buildOutputOptionType(detailFlag, blobFlag, statusFlag));
    eventFactRelated.setMetaDataParamList(this.metaDataParamList);

    String selectClause = eventFactRelated.getSelectClause();
    String serverType = dataSourceLookup.getServerType();
    String factTempTable = "";
    Connection conn = null;
    PreparedStatement query = null;
    try {
      conn = dataSource.getConnection();
      if (serverType.equalsIgnoreCase(DAOFactoryHelper.ORACLE)) {
        factTempTable = getDbSchemaName() + FactRelatedQueryHandler.TEMP_FACT_PARAM_TABLE;
      } else if (serverType.equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) {
        log.debug("creating temp table");
        java.sql.Statement tempStmt = conn.createStatement();
        factTempTable = getDbSchemaName() + SQLServerFactRelatedQueryHandler.TEMP_FACT_PARAM_TABLE;
        try {
          tempStmt.executeUpdate("drop table " + factTempTable);
        } catch (SQLException sqlex) {;
        }
        String createTempInputListTable =
            "create table " + factTempTable + " ( set_index int, char_param1 varchar(500) )";
        tempStmt.executeUpdate(createTempInputListTable);
        log.debug("created temp table" + factTempTable);
      } else if (serverType.equalsIgnoreCase(DAOFactoryHelper.POSTGRES)) {
        log.debug("creating temp table");
        java.sql.Statement tempStmt = conn.createStatement();
        factTempTable = getDbSchemaName() + FactRelatedQueryHandler.TEMP_FACT_PARAM_TABLE;

        try {
          tempStmt.executeUpdate("drop table if exists " + factTempTable);
        } catch (SQLException sqlex) {;
        }

        String createTempInputListTable =
            "create temporary table "
                + factTempTable
                + " ( set_index int, char_param1 varchar(500) )";
        tempStmt.executeUpdate(createTempInputListTable);
        log.debug("created temp table" + factTempTable);
      }
      // if the inputlist is enumeration, then upload the enumerated input
      // to temp table.
      // the uploaded enumerated input will be used in the fact join.
      if (inputOptionListHandler.isEnumerationSet()) {
        inputOptionListHandler.uploadEnumerationValueToTempTable(conn);
      }
      String insertSql = "";
      int i = 0;
      int sqlParamCount = 0;
      ResultSet resultSet = null;
      for (String panelSql : panelSqlList) {
        insertSql =
            " insert into "
                + factTempTable
                + "(char_param1) select distinct obs_encounter_num from ( "
                + panelSql
                + ") b";

        log.debug("Executing SQL [ " + insertSql + "]");
        sqlParamCount = sqlParamCountList.get(i++);
        // conn.createStatement().executeUpdate(insertSql);
        executeUpdateSql(insertSql, conn, sqlParamCount, inputOptionListHandler);
      }

      String finalSql =
          "SELECT "
              + selectClause
              + " FROM "
              + getDbSchemaName()
              + "visit_dimension visit where encounter_num in (select distinct char_param1 from "
              + factTempTable
              + ") order by encounter_num";
      log.debug("Executing SQL [" + finalSql + "]");
      System.out.println("Final Sql " + finalSql);

      query = conn.prepareStatement(finalSql);

      resultSet = query.executeQuery();

      while (resultSet.next()) {
        EventType event = eventBuilder.buildEventSet(resultSet, this.metaDataParamList);
        eventSet.getEvent().add(event);
      }
    } catch (SQLException sqlEx) {
      log.error("", sqlEx);
      throw new I2B2DAOException("sql exception", sqlEx);
    } catch (IOException ioEx) {
      log.error("", ioEx);
      throw new I2B2DAOException("IO exception", ioEx);
    } finally {
      PdoTempTableUtil tempUtil = new PdoTempTableUtil();
      tempUtil.clearTempTable(dataSourceLookup.getServerType(), conn, factTempTable);

      if (inputOptionListHandler != null && inputOptionListHandler.isEnumerationSet()) {
        try {
          inputOptionListHandler.deleteTempTable(conn);
        } catch (SQLException e) {

          e.printStackTrace();
        }
      }
      try {

        JDBCUtil.closeJdbcResource(null, query, conn);
      } catch (SQLException sqlEx) {
        sqlEx.printStackTrace();
      }
    }
    return eventSet;
  }