diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java index b6e4ad61dca..d043c1f146d 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java @@ -218,17 +218,21 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { } } + /** + * This implementation delegates to {@link #catalogNameToUse}. + */ @Override public @Nullable String metaDataCatalogNameToUse(@Nullable String catalogName) { return catalogNameToUse(catalogName); } + /** + * This implementation delegates to {@link #schemaNameToUse}. + * @see #getDefaultSchema() + */ @Override public @Nullable String metaDataSchemaNameToUse(@Nullable String schemaName) { - if (schemaName == null) { - return schemaNameToUse(getDefaultSchema()); - } - return schemaNameToUse(schemaName); + return schemaNameToUse(schemaName != null ? schemaName : getDefaultSchema()); } /** @@ -389,7 +393,7 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { try { tableColumns = databaseMetaData.getColumns( metaDataCatalogName, metaDataSchemaName, metaDataTableName, null); - while (tableColumns.next()) { + while (tableColumns != null && tableColumns.next()) { String columnName = tableColumns.getString("COLUMN_NAME"); int dataType = tableColumns.getInt("DATA_TYPE"); if (dataType == Types.DECIMAL) { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresTableMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresTableMetaDataProvider.java index fa9338a7d2e..cfea217acf1 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresTableMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/PostgresTableMetaDataProvider.java @@ -19,12 +19,16 @@ package org.springframework.jdbc.core.metadata; import java.sql.DatabaseMetaData; import java.sql.SQLException; +import org.springframework.lang.Nullable; + /** * The PostgreSQL specific implementation of {@link TableMetaDataProvider}. * Supports a feature for retrieving generated keys without the JDBC 3.0 - * {@code getGeneratedKeys} support. + * {@code getGeneratedKeys} support. Also, it processes PostgreSQL-returned + * catalog and schema names from {@code DatabaseMetaData} in the given case. * * @author Thomas Risberg + * @author Juergen Hoeller * @since 2.5 */ public class PostgresTableMetaDataProvider extends GenericTableMetaDataProvider { @@ -34,6 +38,18 @@ public class PostgresTableMetaDataProvider extends GenericTableMetaDataProvider } + @Override + @Nullable + public String metaDataCatalogNameToUse(@Nullable String catalogName) { + return catalogName; + } + + @Override + @Nullable + public String metaDataSchemaNameToUse(@Nullable String schemaName) { + return (schemaName != null ? schemaName : getDefaultSchema()); + } + @Override public boolean isGetGeneratedKeysSimulated() { return true;