Example usage for org.springframework.jdbc.core.metadata CallMetaDataProvider initializeWithProcedureColumnMetaData

List of usage examples for org.springframework.jdbc.core.metadata CallMetaDataProvider initializeWithProcedureColumnMetaData

Introduction

In this page you can find the example usage for org.springframework.jdbc.core.metadata CallMetaDataProvider initializeWithProcedureColumnMetaData.

Prototype

void initializeWithProcedureColumnMetaData(DatabaseMetaData databaseMetaData, @Nullable String catalogName,
        @Nullable String schemaName, @Nullable String procedureName) throws SQLException;

Source Link

Document

Initialize the database specific management of procedure column meta-data.

Usage

From source file:org.springframework.jdbc.core.metadata.CallMetaDataProviderFactory.java

/**
 * Create a CallMetaDataProvider based on the database metadata
 * @param dataSource used to retrieve metadata
 * @param context the class that holds configuration and metadata
 * @return instance of the CallMetaDataProvider implementation to be used
 */// w  ww . ja va 2  s  .  c  o  m
static public CallMetaDataProvider createMetaDataProvider(DataSource dataSource,
        final CallMetaDataContext context) {
    try {
        CallMetaDataProvider result = (CallMetaDataProvider) JdbcUtils.extractDatabaseMetaData(dataSource,
                databaseMetaData -> {
                    String databaseProductName = JdbcUtils
                            .commonDatabaseName(databaseMetaData.getDatabaseProductName());
                    boolean accessProcedureColumnMetaData = context.isAccessCallParameterMetaData();
                    if (context.isFunction()) {
                        if (!supportedDatabaseProductsForFunctions.contains(databaseProductName)) {
                            if (logger.isWarnEnabled()) {
                                logger.warn(databaseProductName
                                        + " is not one of the databases fully supported for function calls "
                                        + "-- supported are: " + supportedDatabaseProductsForFunctions);
                            }
                            if (accessProcedureColumnMetaData) {
                                logger.warn(
                                        "Metadata processing disabled - you must specify all parameters explicitly");
                                accessProcedureColumnMetaData = false;
                            }
                        }
                    } else {
                        if (!supportedDatabaseProductsForProcedures.contains(databaseProductName)) {
                            if (logger.isWarnEnabled()) {
                                logger.warn(databaseProductName
                                        + " is not one of the databases fully supported for procedure calls "
                                        + "-- supported are: " + supportedDatabaseProductsForProcedures);
                            }
                            if (accessProcedureColumnMetaData) {
                                logger.warn(
                                        "Metadata processing disabled - you must specify all parameters explicitly");
                                accessProcedureColumnMetaData = false;
                            }
                        }
                    }
                    CallMetaDataProvider provider;
                    if ("Oracle".equals(databaseProductName)) {
                        provider = new OracleCallMetaDataProvider(databaseMetaData);
                    } else if ("DB2".equals(databaseProductName)) {
                        provider = new Db2CallMetaDataProvider((databaseMetaData));
                    } else if ("Apache Derby".equals(databaseProductName)) {
                        provider = new DerbyCallMetaDataProvider((databaseMetaData));
                    } else if ("PostgreSQL".equals(databaseProductName)) {
                        provider = new PostgresCallMetaDataProvider((databaseMetaData));
                    } else if ("Sybase".equals(databaseProductName)) {
                        provider = new SybaseCallMetaDataProvider((databaseMetaData));
                    } else if ("Microsoft SQL Server".equals(databaseProductName)) {
                        provider = new SqlServerCallMetaDataProvider((databaseMetaData));
                    } else if ("HDB".equals(databaseProductName)) {
                        provider = new HanaCallMetaDataProvider((databaseMetaData));
                    } else {
                        provider = new GenericCallMetaDataProvider(databaseMetaData);
                    }
                    if (logger.isDebugEnabled()) {
                        logger.debug("Using " + provider.getClass().getName());
                    }
                    provider.initializeWithMetaData(databaseMetaData);
                    if (accessProcedureColumnMetaData) {
                        provider.initializeWithProcedureColumnMetaData(databaseMetaData,
                                context.getCatalogName(), context.getSchemaName(), context.getProcedureName());
                    }
                    return provider;
                });
        return result;
    } catch (MetaDataAccessException ex) {
        throw new DataAccessResourceFailureException("Error retrieving database metadata", ex);
    }
}