Class DefaultRelationalQuery

    • Method Detail

      • findEach

        public void findEach​(Consumer<SqlRow> consumer)
        Description copied from interface: SqlQuery
        Execute the SqlQuery iterating a row at a time.

        This streaming type query is useful for large query execution as only 1 row needs to be held in memory.

        Specified by:
        findEach in interface SqlQuery
      • findEachWhile

        public void findEachWhile​(Predicate<SqlRow> consumer)
        Description copied from interface: SqlQuery
        Execute the SqlQuery iterating a row at a time with the ability to stop consuming part way through.

        Returning false after processing a row stops the iteration through the query results.

        This streaming type query is useful for large query execution as only 1 row needs to be held in memory.

        Specified by:
        findEachWhile in interface SqlQuery
      • findSingleLong

        public Long findSingleLong()
        Description copied from interface: SqlQuery
        Deprecated - migrate to .mapToScalar(Long.class).findOne().
        
        
            .mapToScalar(Long.class)
            .findOne();
         
        Specified by:
        findSingleLong in interface SqlQuery
      • findEachRow

        public void findEachRow​(RowConsumer consumer)
        Description copied from interface: SqlQuery
        Execute the query reading each row from ResultSet using the RowConsumer.

        This provides a low level option that reads directly from the JDBC ResultSet and is good for processing very large results where (unlike findList) we don't hold all the results in memory but instead can process row by row.

        
        
          String sql = "select id, name, status from customer order by name desc";
        
          DB.sqlQuery(sql)
            .findEachRow((resultSet, rowNum) -> {
        
              // read directly from ResultSet
        
              long id = resultSet.getLong(1);
              String name = resultSet.getString(2);
        
              // do something interesting with the data
        
            });
        
         
        Specified by:
        findEachRow in interface SqlQuery
        Parameters:
        consumer - Used to read and process each ResultSet row.
      • findOne

        public SqlRow findOne()
        Description copied from interface: SqlQuery
        Execute the query returning a single row or null.

        If this query finds 2 or more rows then it will throw a PersistenceException.

        Specified by:
        findOne in interface SqlQuery
      • setParameters

        public DefaultRelationalQuery setParameters​(Object... values)
        Description copied from interface: SqlQuery
        Set one of more positioned parameters.

        This is a convenient alternative to multiple calls to SqlQuery.setParameter(Object).

        
        
           String sql = "select id, name from customer where name like ? and status = ?";
        
           List<SqlRow> list =
             DB.sqlQuery(sql)
               .setParameters("Rob", Status.NEW)
               .findList();
        
        
           // effectively the same as ...
        
               .setParameter("Rob")
               .setParameter("Status.NEW)
        
           // and ...
        
               .setParameter(1, "Rob")
               .setParameter(2, "Status.NEW)
        
         
        Specified by:
        setParameters in interface SqlQuery
      • setParameter

        public DefaultRelationalQuery setParameter​(Object value)
        Description copied from interface: SqlQuery
        Set the next bind parameter by position.
        
        
           String sql = "select id, name from customer where name like ? and status = ?";
        
           List<SqlRow> list =
             DB.sqlQuery(sql)
               .setParameter("Rob")
               .setParameter("Status.NEW)
               .findList();
        
           // the same as ...
        
               .setParameters("Rob", Status.NEW)
        
           // and ...
        
               .setParameter(1, "Rob")
               .setParameter(2, "Status.NEW)
        
         
        Specified by:
        setParameter in interface SqlQuery
        Parameters:
        value - The value to bind
      • setTimeout

        public DefaultRelationalQuery setTimeout​(int secs)
        Description copied from interface: SqlQuery
        Set a timeout on this query.

        This will typically result in a call to setQueryTimeout() on a preparedStatement. If the timeout occurs an exception will be thrown - this will be a SQLException wrapped up in a PersistenceException.

        Specified by:
        setTimeout in interface SqlQuery
        Parameters:
        secs - the query timeout limit in seconds. Zero means there is no limit.
      • setBufferFetchSizeHint

        public DefaultRelationalQuery setBufferFetchSizeHint​(int bufferFetchSizeHint)
        Description copied from interface: SqlQuery
        A hint which for JDBC translates to the Statement.fetchSize().

        Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed for ResultSet.

        Specified by:
        setBufferFetchSizeHint in interface SqlQuery
      • mapToScalar

        public <T> SqlQuery.TypeQuery<T> mapToScalar​(Class<T> attributeType)
        Description copied from interface: SqlQuery
        The query result maps to a single scalar value like Long, BigDecimal, String, UUID, OffsetDateTime etc.

        Any scalar type Ebean is aware of can be used including java time types like Instant, LocalDate, OffsetDateTime, UUID, Inet, Cdir etc.

        
        
           String sql = " select min(updtime) from o_order_detail " +
                        " where unit_price > ? and updtime is not null ";
        
           OffsetDateTime minCreated = DB.sqlQuery(sql)
             .setParameter(42)
             .mapToScalar(OffsetDateTime.class)
             .findOne();
        
         
        Specified by:
        mapToScalar in interface SqlQuery
        Parameters:
        attributeType - The type the result is returned as
        Returns:
        The query to execute via findOne() findList() etc
      • mapTo

        public <T> SqlQuery.TypeQuery<T> mapTo​(RowMapper<T> mapper)
        Description copied from interface: SqlQuery
        Use a RowMapper to map the result to beans.
        Specified by:
        mapTo in interface SqlQuery
        Type Parameters:
        T - The type of beans mapped to
        Parameters:
        mapper - Maps rows to beans
        Returns:
        The query to execute by findOne() findList() etc