All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dongliu.dbutils.SQLResultSet Maven / Gradle / Ivy

package net.dongliu.dbutils;

import net.dongliu.dbutils.exception.UncheckedSQLException;
import net.dongliu.dbutils.handlers.*;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Stream;

/**
 * Class for result set retrieve.
 *
 * @author Liu Dong
 */
public class SQLResultSet implements AutoCloseable {

    private final ResultSet resultSet;
    private final AutoCloseable[] closeables;

    public SQLResultSet(ResultSet resultSet, AutoCloseable... closeables) {
        this.resultSet = Objects.requireNonNull(resultSet);
        this.closeables = Objects.requireNonNull(closeables);
    }

    /**
     * Handler result, and return converted values
     */
    @SuppressWarnings("unchecked")
    public  T handle(ResultSetHandler handler) {
        try {
            return handler.handle(resultSet);
        } catch (SQLException e) {
            throw new UncheckedSQLException(e);
        } finally {
            close();
        }
    }

    /**
     * Return query result as List of raw object array
     */
    @Nonnull
    public List toArrayList() {
        return handle(ArrayListHandler.getInstance());
    }

    /**
     * Return query result as object array
     */
    @Nullable
    public Object[] toArray() {
        return handle(ArrayHandler.getInstance());
    }

    /**
     * Return query result as raw Map List
     */
    @Nonnull
    public List> toMapList() {
        return handle(MapListHandler.getInstance());
    }

    /**
     * Return query result as raw Map
     */
    @Nullable
    public Map toMap() {
        return handle(MapHandler.getInstance());
    }

    /**
     * Return query result as Bean List
     */
    @Nonnull
    public  List toBeanList(Class cls) {
        return handle(BeanListHandler.getInstance(cls));
    }

    /**
     * Return query result as bean
     */
    @Nullable
    public  T toBean(Class cls) {
        return handle(BeanHandler.getInstance(cls));
    }

    /**
     * Return query result as Bean List
     *
     * @param nameMap custom table-column name and bean property name mapping
     */
    @Nonnull
    public  List toBeanList(Class cls, Map nameMap) {
        return handle(BeanListHandler.getInstance(cls, nameMap));
    }

    /**
     * Return query result as bean
     *
     * @param nameMap custom table-column name and bean property name mapping
     */
    @Nullable
    public  T toBean(Class cls, Map nameMap) {
        return handle(BeanHandler.getInstance(cls, nameMap));
    }

    /**
     * Return query result as type T, using processor to convert row
     */
    @Nullable
    public  T toSingle(RowProcessor processor) {
        return handle(new SingleResultHandler<>(processor));
    }

    /**
     * Return query result as List, using processor to convert row
     */
    @Nonnull
    public  List toList(RowProcessor processor) {
        return handle(new ListResultHandler<>(processor));
    }

    /**
     * Executes the SQL query and return result as stream.
     * You need consume all data in stream, or close stream manually
     */
    public  Stream asStream(RowProcessor processor) {
        return ResultSets.asStream(resultSet, processor, closeables);
    }

    /**
     * Query result as Object array stream, with column index as array index
     */
    public Stream asArrayStream() {
        return asStream(ArrayRowProcessor.getInstance());
    }

    /**
     * Query result as map stream, with column name as key
     */
    public Stream> asMapStream() {
        return asStream(new MapRowProcessor());
    }

    /**
     * Query result as bean stream
     */
    public  Stream asBeanStream(Class cls) {
        return asStream(new BeanRowProcessor<>(cls));
    }

    /**
     * Query result as bean stream
     */
    public  Stream asBeanStream(Class cls, Map nameMap) {
        return asStream(new BeanRowProcessor<>(cls, nameMap));
    }

    /**
     * Call close if not consume result by other methods
     */
    @Override
    public void close() {
        Closeables.closeQuietly(resultSet);
        Closeables.closeQuietly(closeables);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy