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

org.jooq.tools.jdbc.JDBCUtils Maven / Gradle / Ivy

There is a newer version: 0.10.0
Show newest version
/**
 * Copyright (c) 2009-2014, Data Geekery GmbH (http://www.datageekery.com)
 * All rights reserved.
 *
 * This work is dual-licensed
 * - under the Apache Software License 2.0 (the "ASL")
 * - under the jOOQ License and Maintenance Agreement (the "jOOQ License")
 * =============================================================================
 * You may choose which license applies to you:
 *
 * - If you're using this work with Open Source databases, you may choose
 *   either ASL or jOOQ License.
 * - If you're using this work with at least one commercial database, you must
 *   choose jOOQ License
 *
 * For more information, please visit http://www.jooq.org/licenses
 *
 * Apache Software License 2.0:
 * -----------------------------------------------------------------------------
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * jOOQ License and Maintenance Agreement:
 * -----------------------------------------------------------------------------
 * Data Geekery grants the Customer the non-exclusive, timely limited and
 * non-transferable license to install and use the Software under the terms of
 * the jOOQ License and Maintenance Agreement.
 *
 * This library is distributed with a LIMITED WARRANTY. See the jOOQ License
 * and Maintenance Agreement for more details: http://www.jooq.org/licensing
 */
package org.jooq.tools.jdbc;

// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
import static org.jooq.SQLDialect.HSQLDB;
// ...
// ...
import static org.jooq.SQLDialect.MARIADB;
import static org.jooq.SQLDialect.MYSQL;
// ...
import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...

import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLInput;
import java.sql.Statement;

import org.jooq.SQLDialect;

/**
 * JDBC-related utility methods.
 *
 * @author Lukas Eder
 */
public class JDBCUtils {

    /**
     * "Guess" the {@link SQLDialect} from a {@link Connection} instance.
     * 

* This method tries to guess the SQLDialect of a connection * from the its connection URL as obtained by * {@link DatabaseMetaData#getURL()}. If the dialect cannot be guessed from * the URL (e.g. when using an JDBC-ODBC bridge), further actions may be * implemented in the future. * * @see #dialect(String) */ @SuppressWarnings("deprecation") public static final SQLDialect dialect(Connection connection) { SQLDialect result = SQLDialect.SQL99; try { DatabaseMetaData m = connection.getMetaData(); /* [pro] xx xxxxxx xxxxxxx x xxxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxxxxxxxxxxxxxxxx x xx [/pro] */ String url = m.getURL(); result = dialect(url); } catch (SQLException ignore) {} if (result == SQLDialect.SQL99) { // If the dialect cannot be guessed from the URL, take some other // measures, e.g. by querying DatabaseMetaData.getDatabaseProductName() } return result; } /** * "Guess" the {@link SQLDialect} from a connection URL. */ @SuppressWarnings("deprecation") public static final SQLDialect dialect(String url) { // The below list might not be accurate or complete. Feel free to // contribute fixes related to new / different JDBC driver configuraitons if (url.startsWith("jdbc:cubrid:")) { return CUBRID; } else if (url.startsWith("jdbc:derby:")) { return DERBY; } else if (url.startsWith("jdbc:firebirdsql:")) { return FIREBIRD; } else if (url.startsWith("jdbc:h2:")) { return H2; } else if (url.startsWith("jdbc:hsqldb:")) { return HSQLDB; } else if (url.startsWith("jdbc:mariadb:")) { return MARIADB; } else if (url.startsWith("jdbc:mysql:") || url.startsWith("jdbc:google:")) { return MYSQL; } else if (url.startsWith("jdbc:postgresql:")) { return POSTGRES; } else if (url.startsWith("jdbc:sqlite:")) { return SQLITE; } /* [pro] xx xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxx x xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxx x xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxxxxxxx x xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxxxxx x xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxxxxx x xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx xxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxxxxxxxx x xxxx xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x xxxxxx xxxxxxx x xx [/pro] */ return SQLDialect.SQL99; } /** * "Guess" the JDBC driver from a connection URL. */ public static final String driver(String url) { switch (dialect(url).family()) { case CUBRID: return "cubrid.jdbc.driver.CUBRIDDriver"; case DERBY: return "org.apache.derby.jdbc.ClientDriver"; case FIREBIRD: return "org.firebirdsql.jdbc.FBDriver"; case H2: return "org.h2.Driver"; case HSQLDB: return "org.hsqldb.jdbcDriver"; case MARIADB: return "org.mariadb.jdbc.Driver"; case MYSQL: return "com.mysql.jdbc.Driver"; case POSTGRES: return "org.postgresql.Driver"; case SQLITE: return "org.sqlite.JDBC"; /* [pro] xx xxxx xxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxx xxxxxxx xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xx [/pro] */ } return "java.sql.Driver"; } /** * Safely close a connection. *

* This method will silently ignore if connection is * null, or if {@link Connection#close()} throws an exception. */ public static final void safeClose(Connection connection) { if (connection != null) { try { connection.close(); } catch (Exception ignore) {} } } /** * Safely close a statement. *

* This method will silently ignore if statement is * null, or if {@link Statement#close()} throws an exception. */ public static final void safeClose(Statement statement) { if (statement != null) { try { statement.close(); } catch (Exception ignore) {} } } /** * Safely close a result set. *

* This method will silently ignore if resultSet is * null, or if {@link ResultSet#close()} throws an exception. */ public static final void safeClose(ResultSet resultSet) { if (resultSet != null) { try { resultSet.close(); } catch (Exception ignore) {} } } /** * Safely close a result set and / or a statement. *

* This method will silently ignore if resultSet or * statement is null, or if * {@link ResultSet#close()} or {@link Statement#close()} throws an * exception. */ public static final void safeClose(ResultSet resultSet, PreparedStatement statement) { safeClose(resultSet); safeClose(statement); } /** * Safely free a blob. *

* This method will silently ignore if blob is * null, or if {@link Blob#free()} throws an exception. */ public static final void safeFree(Blob blob) { if (blob != null) { try { blob.free(); } catch (Exception ignore) {} // [#3069] The free() method was added only in JDBC 4.0 / Java 1.6 catch (AbstractMethodError ignore) {} } } /** * Safely free a clob. *

* This method will silently ignore if clob is * null, or if {@link Clob#free()} throws an exception. */ public static final void safeFree(Clob clob) { if (clob != null) { try { clob.free(); } catch (Exception ignore) {} // [#3069] The free() method was added only in JDBC 4.0 / Java 1.6 catch (AbstractMethodError ignore) {} } } /** * Convenient way to check if a JDBC-originated record was null. *

* This is useful to check if primitive types obtained from the JDBC API * were actually SQL NULL values. * * @param stream The data source from which a value was read * @param value The value that was read * @return The value or null if the * {@link SQLInput#wasNull()} is true */ public static final T wasNull(SQLInput stream, T value) throws SQLException { return stream.wasNull() ? null : value; } /** * Convenient way to check if a JDBC-originated record was null. *

* This is useful to check if primitive types obtained from the JDBC API * were actually SQL NULL values. * * @param rs The data source from which a value was read * @param value The value that was read * @return The value or null if the * {@link ResultSet#wasNull()} is true */ public static final T wasNull(ResultSet rs, T value) throws SQLException { return rs.wasNull() ? null : value; } /** * Convenient way to check if a JDBC-originated record was null. *

* This is useful to check if primitive types obtained from the JDBC API * were actually SQL NULL values. * * @param statement The data source from which a value was read * @param value The value that was read * @return The value or null if the * {@link CallableStatement#wasNull()} is true */ public static final T wasNull(CallableStatement statement, T value) throws SQLException { return statement.wasNull() ? null : value; } /** * No instances. */ private JDBCUtils() {} }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy