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

com.jcabi.jdbc.SingleOutcome Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2012-2023, jcabi.com
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met: 1) Redistributions of source code must retain the above
 * copyright notice, this list of conditions and the following
 * disclaimer. 2) Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following
 * disclaimer in the documentation and/or other materials provided
 * with the distribution. 3) Neither the name of the jcabi.com nor
 * the names of its contributors may be used to endorse or promote
 * products derived from this software without specific prior written
 * permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.jcabi.jdbc;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.UUID;
import lombok.EqualsAndHashCode;
import lombok.RequiredArgsConstructor;
import lombok.ToString;

/**
 * Outcome that returns first column in the first row.
 *
 * 

Use it when you need the first column in the first row: * *

 Long id = new JdbcSession(source)
 *   .sql("SELECT id FROM user WHERE name = ?")
 *   .set("Jeff Lebowski")
 *   .select(new SingleOutcome<Long>(Long.class));
* *

Supported types are: {@link String}, {@link Long}, {@link Boolean}, * {@link Byte}, {@link Date}, {@link UUID}, and {@link Utc}. * *

By default, the outcome throws {@link SQLException} if no records * are found in the {@link ResultSet}. You can change this behavior by using * a two-arguments constructor ({@code null} will be returned if * {@link ResultSet} is empty): * *

 String name = new JdbcSession(source)
 *   .sql("SELECT name FROM user WHERE id = ?")
 *   .set(555)
 *   .select(new SingleOutcome<Long>(Long.class), true);
 * if (name == null) {
 *   // such a record wasn't found in the database
 * }
* * @param Type of items * @since 0.1.8 */ @ToString @EqualsAndHashCode(of = {"mapping", "silently"}) @RequiredArgsConstructor public final class SingleOutcome implements Outcome { /** * The type. */ private final Mapping mapping; /** * Silently return NULL if no row found. */ private final boolean silently; /** * Public ctor. * * @param tpe The type to convert to */ public SingleOutcome(final Class tpe) { this(tpe, false); } /** * Public ctor. * * @param tpe The type to convert to * @param slnt Silently return NULL if there is no row */ @SuppressWarnings("PMD.ConstructorOnlyInitializesOrCallOtherConstructors") public SingleOutcome(final Class tpe, final boolean slnt) { this( tpe, Outcome.DEFAULT_MAPPINGS, slnt ); } /** * Public ctor. * * @param tpe The type to convert to * @param mps The mappings * @param slnt Silently return NULL if there is no row */ public SingleOutcome(final Class tpe, final Mappings mps, final boolean slnt) { this(mps.forType(tpe), slnt); } @Override public T handle(final ResultSet rset, final Statement stmt) throws SQLException { T result = null; if (rset.next()) { result = this.fetch(rset); } else if (!this.silently) { throw new SQLException("No records found"); } return result; } /** * Fetch the value from result set. * * @param rset Result set * @return The result * @throws SQLException If some error inside */ private T fetch(final ResultSet rset) throws SQLException { return this.mapping.map(rset); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy