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

nablarch.common.dao.DatabaseUtil Maven / Gradle / Ivy

The newest version!
package nablarch.common.dao;

import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Map;

import nablarch.core.db.connection.AppDbConnection;
import nablarch.core.db.connection.DbConnectionContext;
import nablarch.core.db.connection.TransactionManagerConnection;
import nablarch.core.repository.SystemRepository;

/**
 * データベースに関するユーティリティクラス。
 *
 * @author hisaaki sioiri
 */
public final class DatabaseUtil {

    /** データベースからメタ情報を取得するクラス */
    private static final DatabaseMetaDataExtractor DEFAULT_METADATA_EXTRACTOR = new DatabaseMetaDataExtractor();

    /** 隠蔽コンストラクタ。 */
    private DatabaseUtil() {
    }

    /**
     * 主キー情報を取得する。
     *
     * @param tableName テーブル名
     * @return 主キー情報(キー:カラム名、値:ポジション)
     */
    public static Map getPrimaryKey(String tableName) {
        return getDatabaseMetaDataExtractor().getPrimaryKeys(tableName);
    }

    /**
     * 識別子をデータベースメタ情報の定義を元に変換する。
     *
     * @param identifiers 識別子
     * @return 変換後の値
     */
    public static String convertIdentifiers(String identifiers) {
        try {
            return doConvertIdentifiers(getMetaData(), identifiers);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 識別子をデータベースメタ情報の定義を元に変換する。
     *
     * @param metaData データベースメタ情報
     * @param identifiers 識別子
     * @return 変換後の値
     */
    public static String convertIdentifiers(DatabaseMetaData metaData, String identifiers) {
        try {
            return doConvertIdentifiers(metaData, identifiers);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 識別子をデータベースメタ情報の定義を元に変換する。
     *
     * @param metaData データベースメタ情報
     * @param identifiers 識別子
     * @return 変換後の値
     * @throws SQLException データベース関連の例外
     */
    public static String doConvertIdentifiers(DatabaseMetaData metaData, String identifiers) throws SQLException {
        if (metaData.storesMixedCaseIdentifiers()) {
            return identifiers;
        } else if (metaData.storesUpperCaseIdentifiers()) {
            return identifiers.toUpperCase();
        } else if (metaData.storesLowerCaseIdentifiers()) {
            return identifiers.toLowerCase();
        }
        return identifiers;
    }

    /**
     * データベースメタデータを取得する。
     *
     * @return データベースメタデータ
     * @throws SQLException データベース関連の例外
     */
    public static DatabaseMetaData getMetaData() throws SQLException {
        AppDbConnection connection = DbConnectionContext.getConnection();

        if (!(connection instanceof TransactionManagerConnection)) {
            throw new IllegalStateException("failed to get DatabaseMetaData.");
        }

        return ((TransactionManagerConnection) connection).getConnection().getMetaData();
    }

    /**
     * {@link DatabaseMetaDataExtractor}を取得する。
     * 

* {@link SystemRepository}上に設定がない場合は、デフォルト実装の{@link DatabaseMetaDataExtractor}を返す。 * * @return {@link DatabaseMetaDataExtractor} */ private static DatabaseMetaDataExtractor getDatabaseMetaDataExtractor() { final DatabaseMetaDataExtractor databaseMetaDataExtractor = SystemRepository.get("databaseMetaDataExtractor"); return databaseMetaDataExtractor == null ? DEFAULT_METADATA_EXTRACTOR : databaseMetaDataExtractor; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy