Class JDBCDataStore
- All Implemented Interfaces:
DataAccess<SimpleFeatureType,
,SimpleFeature> DataStore
,GmlObjectStore
This class is not intended to be subclassed on a per database basis. Instead the notion of a "dialect" is used.
Dialects
A dialect (SQLDialect
) encapsulates all the operations that are database specific. Therefore to implement a
jdbc based datastore one must extend SQLDialect. The specific dialect to use is set using
setSQLDialect(SQLDialect)
.
Database Connections
Connections to the underlying database are obtained through aDataSource
. A datastore must be specified using
setDataSource(DataSource)
.
Schemas
This datastore supports the notion of database schemas, which is more or less just a grouping of tables. When a schema is specified, only those tables which are part of the schema are provided by the datastore. The schema is specified usingsetDatabaseSchema(String)
.
Spatial Functions
The set of spatial operations or functions that are supported by the specific database are reported with aFilterCapabilities
instance. This is specified using #setFilterCapabilities(FilterCapabilities)
.- Author:
- Justin Deoliveira, The Open Planning Project
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected HashMap<Class<? extends FeatureVisitor>,
String> Feature visitor to aggregate function nameprotected boolean
flag controlling if the datastore is supporting feature and geometry relationships with associationsprotected int
The number of features to bufferize while inserting in order to do batch inserts.protected JDBCCallbackFactory
java class to sql type mappings;protected List<ConnectionLifecycleListener>
The listeners that are allowed to handle the connection lifecycleprotected String
The database schema.protected DataSource
data sourceprotected ConcurrentHashMap<Integer,
String> cache of sqltypes found in databasethe dialect of sqlprotected static final ReferencedEnvelope
The envelope returned when bounds is called against a geometryless feature typeprotected boolean
flag controlling whether primary key columns of a table are exposed via the feature type.protected static final String
name of table to use to store feature associations whenassociations
is set.protected static final String
name of table to use to store feature relationships (information about associations) whenassociations
is set.int
The fetch size for this datastore, defaulting to 1000.protected static final String
name of table to use to store geometry associations whenassociations
is set.protected static final String
name of table to use to store geometries whenassociations
is set.static final String
Used to specify the column alias to use when encoding a column in a selectstatic final String
Contains aEnumMapping
to support enumsstatic final String
The native SRID associated to a certain descriptor TODO: qualify this key with 'org.geotools.jdbc'static final String
The key for attribute descriptor user data which specifies the original database column data type, as aTypes
value.static final String
The key for attribute descriptor user data which specifies the original database column data type.static final String
Boolean marker stating whether an attribute is part of the primary keystatic final String
Boolean marker stating whether the feature type is to be considered read onlystatic final int
Max number of ids to use for the optimized locks checking filter.protected static final String
name of table to use to store multi geometries made up of non-multi geometries whenassociations
is set.protected PrimaryKeyFinder
Finds the primary key definitions (instantiated here because the finders might keep state)sql type name to java class mappingssql type to java class mappingssql type to sql type name overridesjava supported filter function mappings to dialect name;protected static final Boolean
When true, record a stack trace documenting who disposed the JDBCDataStore.protected Map<String,
VirtualTable> Contains the SQL definition of the various virtual tablesFields inherited from class ContentDataStore
dataStoreFactory, entries, featureFactory, filterFactory, geometryFactory, JOINED_FEATURE_TYPE, lockingManager, LOGGER, namespaceURI, typeFactory, WRITER_ADD, WRITER_COMMIT, WRITER_UPDATE
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
applyLimitOffset
(StringBuffer sql, Query query) Applies the limit/offset elements to the query if they are specified and if the dialect supports themBuilds a transaction object around a user provided connection.void
closeSafe
(Connection cx) Utility method for closing a connection.void
Utility method for closing a result set.void
Utility method for closing a statement.protected String
Creates the sql for the association table.protected final Connection
Creates a new connection.protected ContentState
createContentState
(ContentEntry entry) Creates an instanceofJDBCState
.protected ContentFeatureSource
createFeatureSource
(ContentEntry entry) Creates a new instance ofJDBCFeatureStore
.createFilterToSQL
(SimpleFeatureType featureType) Creates a new instance of a filter to sql encoder.protected String
Creates the sql for the geometry association table.protected String
Creates the sql for the geometry table.void
createIndex
(Index index) Creates a new database indexprotected String
Creates the sql for the multi_geometry table.createPreparedFilterToSQL
(SimpleFeatureType featureType) Creates a new instance of a filter to sql encoder to be used in a prepared statement.protected String
Creates the sql for the relationship table.void
createSchema
(SimpleFeatureType featureType) Creates a table in the underlying database from the specified table.protected String
createTableSQL
(SimpleFeatureType featureType, Connection cx) Generates a 'CREATE TABLE' sql statement.Generates the list of type names provided by the database.void
createVirtualTable
(VirtualTable vtable) Adds a virtual table to the data store.decodeFID
(PrimaryKey key, String FID, boolean strict) Decodes a fid into its components based on a primary key.protected void
delete
(SimpleFeatureType featureType, String fid, Connection cx) Deletes an existing feature in the database for a particular feature type / fid.protected void
delete
(SimpleFeatureType featureType, Filter filter, Connection cx) Deletes an existing feature(s) in the database for a particular feature type / table.protected String
deleteSQL
(SimpleFeatureType featureType, Filter filter) Generates a 'DELETE FROM' sql statement.protected PreparedStatement
deleteSQLPS
(SimpleFeatureType featureType, Filter filter, Connection cx) Generates a 'DELETE FROM' prepared statement.void
dispose()
Disposes of this data store and releases any resource that it is using.void
Creates a new database indexprotected String
dropTableSQL
(SimpleFeatureType featureType, Connection cx) Generates a 'DROP TABLE' sql statement.dropVirtualTable
(String name) Removes and returns the specified virtual tablevoid
encodeAliasedTableName
(String tableName, StringBuffer sql, Hints hints, String alias) Helper method to encode table name which checks if a schema is set and prefixes the table name with it, with the addition of an alias to the nameprotected static String
protected String
encodeFID
(PrimaryKey pkey, ResultSet rs) Calls through to:protected String
encodeFID
(PrimaryKey pkey, ResultSet rs, int offset) Encodes a feature id from a primary key and result set values.protected void
encodeFunction
(String function, List<Expression> expressions, StringBuffer sql, FilterToSQL filterToSQL) protected void
encodeFunction
(String function, Expression expression, StringBuffer sql, FilterToSQL filterToSQL) void
encodeGeometryColumn
(GeometryDescriptor gatt, StringBuffer sql, Hints hints) Encoding a geometry column with respect to hints Supported Hints are provided bySQLDialect.addSupportedHints(Set)
protected void
encodeGeometryColumn
(GeometryDescriptor gatt, String prefix, StringBuffer sql, Hints hints) protected void
encodeGroupByStatement
(List<Expression> groupByExpressions, StringBuffer sql, FilterToSQL filterToSQL, boolean aggregateOnExpression) Helper method that adds a group by statement to the SQL query.protected void
encodeTableJoin
(SimpleFeatureType featureType, JoinInfo join, Query query, StringBuffer sql) Helper method to encode the join clause(s) of a query.void
encodeTableName
(String tableName, StringBuffer sql, Hints hints) Helper method to encode table name which checks if a schema is set and prefixes the table name with it.protected List<FilterToSQL>
encodeWhereJoin
(SimpleFeatureType featureType, JoinInfo join, StringBuffer sql) protected void
Helper method for creating geometry association table if it does not exist.protected void
ensureAuthorization
(SimpleFeatureType featureType, Filter filter, Transaction tx, Connection cx) Ensures that that the specified transaction has access to features specified by a filter.escapeNamePattern
(DatabaseMetaData metaData, String name) Escapes a name pattern used in e.g.protected List<Expression>
extractGroupByExpressions
(FeatureVisitor visitor) Helper method that extracts a list of group by attributes from a group by visitor.protected GroupByVisitor.GroupByRawResult
extractValuesFromResultSet
(Connection cx, SimpleFeatureType featureType, ResultSet resultSet, List<Expression> groupBy, Function<Object, Object> converter, Hints hints) Helper method that translate the result set to the appropriate group by visitor result formatprotected void
finalize()
protected String
findPrimaryKeyColumnName
(SimpleFeatureType featureType) getAbsoluteFeatureSource
(String typeName) Map<Class<? extends FeatureVisitor>,
String> Returns the supported aggregate functions and the visitors they map to.protected Object
getAggregateValue
(FeatureVisitor visitor, SimpleFeatureType featureType, Query query, Connection cx) Results the value of an aggregate function over a query.int
protected ReferencedEnvelope
getBounds
(SimpleFeatureType featureType, Query query, Connection cx) Returns the bounds of the features for a particular feature type / table.The java type to sql type mappings that the datastore uses when reading and writing objects to and from the database.protected static LinkedHashSet<String>
getColumnNames
(PrimaryKey key) Returns the set of the primary key column names.protected Class
getColumnType
(DatabaseMetaData metaData, String databaseSchema2, String tableName, String columnName) Returns the type of the column by inspecting the metadata, with the collaboration of the dialectReturns a JDBC Connection to the underlying database for the specified GeoToolsTransaction
.protected final Connection
getConnection
(JDBCState state) Gets a database connection for the specified feature store.Returns a modifiable list of connection lifecycle listenersprotected int
getCount
(SimpleFeatureType featureType, Query query, Connection cx) Returns the count of the features for a particular feature type / table.The schema from which this datastore is serving tables from.The data source the datastore uses to obtain connections to the underlying database.Returns a map integer constants for database types (fromTypes
) to database type names.protected int
getDescriptorDimension
(AttributeDescriptor descriptor) Extracts the eventual native dimension user property from the descriptor, returns -1 if not foundprotected int
getDescriptorSRID
(AttributeDescriptor descriptor) Extracts the eventual native SRID user property from the descriptor, returns -1 if not foundint
The current fetch size.The filter capabilities which reports which spatial operations the underlying database can handle natively.protected int
getGeometryDimension
(Geometry g, AttributeDescriptor descriptor) Looks up the geometry dimension by trying a number of heuristics.protected int
getGeometrySRID
(Geometry g, AttributeDescriptor descriptor) Looks up the geometry srs by trying a number of heuristics.getGmlObject
(GmlObjectId id, Hints hints) Looks up an object by its gml id.getIndexes
(String typeName) Lists all indexes associated to the given feature typeClass<?>
getMapping
(int sqlType) Returns the java type mapped to the specified sql type.getMapping
(Class<?> clazz) Returns the sql type mapped to the specified java type.getMapping
(Class<?> binding, AttributeDescriptor d) Returns the sqlType of the given attribute, if present.Class<?>
getMapping
(String sqlTypeName) Returns the java type mapped to the specified sql type name.getPrimaryKey
(SimpleFeatureType featureType) Returns the primary key object for a particular feature type / table, deriving it from the underlying database metadata.protected PrimaryKey
getPrimaryKey
(ContentEntry entry) Returns the primary key object for a particular entry, deriving it from the underlying database metadata.Returns the finder used to buildPrimaryKey
representationsprotected String
getPropertyName
(SimpleFeatureType featureType, PropertyName propertyName) Helper method for executing a property name against a feature type.The dialect the datastore uses to generate sql statements in order to communicate with the underlying database.The sql type name to java type mappings that the dialect uses when reading and writing objects to and from the database.The sql type to java type mappings that the datastore uses when reading and writing objects to and from the database.Returns any ovverides which map integer constants for database types (fromTypes
) to database type names.Returns a live, immutable view of the virtual tables map (from name to definition)protected <F extends FilterToSQL>
FinitializeFilterToSQL
(F toSQL, SimpleFeatureType featureType) Helper method to initialize a filter encoder instance.protected void
insert
(Collection<? extends SimpleFeature> features, SimpleFeatureType featureType, Connection cx) Inserts a collection of new features into the database for a particular feature type / table.protected void
insert
(SimpleFeature feature, SimpleFeatureType featureType, Connection cx) Inserts a new feature into the database for a particular feature type / table.protected String
insertSQL
(SimpleFeatureType featureType, SimpleFeature feature, KeysFetcher keysFetcher, Connection cx) Generates a 'INSERT INFO' sql statement.boolean
Flag controlling if the datastore is supporting feature and geometry relationships with associationsprotected boolean
isCountVisitor
(FeatureVisitor visitor) boolean
Determines if the datastore creates feature types which include those columns / attributes which compose the primary key.protected boolean
isExposePrimaryKeyColumns
(SimpleFeatureType featureType) Returns the expose primary key columns flag for the specified feature typeprotected boolean
isGeneralizationRequired
(Hints hints, GeometryDescriptor gatt) Checks if geometry generalization required and makes senseprotected boolean
isGenerated
(PrimaryKey pkey) Determines if a primary key is made up entirely of column which are generated via an auto-generating column or a sequence.protected boolean
isGeometryReduceRequired
(Hints hints, GeometryDescriptor gatt, Hints.Key param) Checks if reduction required and makes senseprotected boolean
isGroupByVisitor
(FeatureVisitor visitor) Helper method the checks if a feature visitor is a group by visitor,protected boolean
isSimplificationRequired
(Hints hints, GeometryDescriptor gatt) Checks if geometry simplification required and makes senseprotected String
matchAggregateFunction
(FeatureVisitor visitor) Helper method that will try to match a feature visitor with an aggregate function.protected final void
releaseConnection
(Connection cx, JDBCState state) Releases an existing connection (paying special attention toTransaction.AUTO_COMMIT
.void
removeSchema
(String typeName) Used to permanently remove a schema from the underlying storagevoid
removeSchema
(Name typeName) Used to permanently remove a schema from the underlying storageprotected String
selectAggregateSQL
(String function, List<Expression> attributes, List<Expression> groupByExpressions, SimpleFeatureType featureType, Query query, LimitingVisitor visitor) protected PreparedStatement
selectAggregateSQLPS
(String function, List<Expression> attributes, List<Expression> groupByExpressions, SimpleFeatureType featureType, Query query, LimitingVisitor visitor, Connection cx) protected String
Creates the sql for the association table.protected PreparedStatement
selectAssociationSQLPS
(String fid, Connection cx) Creates the prepared statement for the association table.protected String
selectBoundsSQL
(SimpleFeatureType featureType, Query query) Generates a 'SELECT' sql statement which selects bounds.protected PreparedStatement
selectBoundsSQLPS
(SimpleFeatureType featureType, Query query, Connection cx) Generates a 'SELECT' prepared statement which selects bounds.protected String
selectGeometryAssociationSQL
(String fid, String gid, String gname) Creates the sql for a select from the geometry association table.protected PreparedStatement
selectGeometryAssociationSQLPS
(String fid, String gid, String gname, Connection cx) Creates the prepared statement for a select from the geometry association table.protected String
selectGeometrySQL
(String gid) Creates the sql for a select from the geometry table.protected PreparedStatement
selectGeometrySQLPS
(String gid, Connection cx) Creates the prepared for a select from the geometry table.protected String
selectJoinSQL
(SimpleFeatureType featureType, JoinInfo join, Query query) protected PreparedStatement
selectJoinSQLPS
(SimpleFeatureType featureType, JoinInfo join, Query query, Connection cx) protected String
Creates the sql for a select from the multi geometry table.protected PreparedStatement
selectMultiGeometrySQLPS
(String gid, Connection cx) Creates the prepared statement for a select from the multi geometry table.protected String
selectRelationshipSQL
(String table, String column) Creates the sql for the relationship table.protected PreparedStatement
selectRelationshipSQLPS
(String table, String column, Connection cx) Creates the prepared statement for a query against the relationship table.protected String
selectSQL
(SimpleFeatureType featureType, Query query) Generates a 'SELECT p1, p2, ...protected PreparedStatement
selectSQLPS
(SimpleFeatureType featureType, Query query, Connection cx) Generates a 'SELECT p1, p2, ...void
setAssociations
(boolean foreignKeyGeometries) Sets the flag controlling if the datastore is supporting feature and geometry relationships with associationsvoid
setBatchInsertSize
(int batchInsertSize) Set the number of features to bufferize while inserting in order to do batch inserts.void
setCallbackFactory
(JDBCCallbackFactory factory) void
setDatabaseSchema
(String databaseSchema) Set the database schema for the datastore.void
setDataSource
(DataSource dataSource) Sets the data source the datastore uses to obtain connections to the underlying database.void
setExposePrimaryKeyColumns
(boolean exposePrimaryKeyColumns) Sets the flag controlling if the datastore creates feature types which include those columns / attributes which compose the primary key.void
setFetchSize
(int fetchSize) Changes the fetch size.protected void
setGmlProperties
(Geometry g, String gid, String name, String description) Helper method for setting the gml:id of a geometry as user data.protected void
setPreparedFilterValues
(PreparedStatement ps, List<FilterToSQL> toSQLs, Connection cx) Helper method for setting the values of the WHERE class of a prepared statement from a list of PreparedFilterToSQL.void
setPreparedFilterValues
(PreparedStatement ps, PreparedFilterToSQL toSQL, int offset, Connection cx) Helper method for setting the values of the WHERE class of a prepared statement.void
setPrimaryKeyFinder
(PrimaryKeyFinder primaryKeyFinder) Sets the finder used to buildPrimaryKey
representationsvoid
setSQLDialect
(SQLDialect dialect) Sets the dialect the datastore uses to generate sql statements in order to communicate with the underlying database.protected void
update
(SimpleFeatureType featureType, List<AttributeDescriptor> attributes, List<Object> values, Filter filter, Connection cx) Updates an existing feature(s) in the database for a particular feature type / table.protected void
update
(SimpleFeatureType featureType, AttributeDescriptor[] attributes, Object[] values, Filter filter, Connection cx) Updates an existing feature(s) in the database for a particular feature type / table.protected String
updateSQL
(SimpleFeatureType featureType, AttributeDescriptor[] attributes, Object[] values, Filter filter, Set<String> pkColumnNames) Generates an 'UPDATE' sql statement.protected PreparedStatement
updateSQLPS
(SimpleFeatureType featureType, AttributeDescriptor[] attributes, Object[] values, Filter filter, Set<String> pkColumnNames, Connection cx) Generates an 'UPDATE' prepared statement.Methods inherited from class ContentDataStore
ensureEntry, ensureFeatureStore, entry, getDataStoreFactory, getEntry, getFeatureFactory, getFeatureReader, getFeatureSource, getFeatureSource, getFeatureSource, getFeatureSource, getFeatureTypeFactory, getFeatureWriter, getFeatureWriter, getFeatureWriterAppend, getFilterFactory, getGeometryFactory, getInfo, getLockingManager, getLogger, getNames, getNamespaceURI, getSchema, getSchema, getTypeNames, name, removeEntry, setDataStoreFactory, setFeatureFactory, setFeatureTypeFactory, setFilterFactory, setGeometryFactory, setNamespaceURI, updateSchema, updateSchema
-
Field Details
-
TRACE_ENABLED
When true, record a stack trace documenting who disposed the JDBCDataStore. If dispose() is called a second time we can identify the offending parties. -
JDBC_NATIVE_SRID
The native SRID associated to a certain descriptor TODO: qualify this key with 'org.geotools.jdbc'- See Also:
-
JDBC_READ_ONLY
Boolean marker stating whether the feature type is to be considered read only- See Also:
-
JDBC_PRIMARY_KEY_COLUMN
Boolean marker stating whether an attribute is part of the primary key- See Also:
-
JDBC_NATIVE_TYPENAME
The key for attribute descriptor user data which specifies the original database column data type.- See Also:
-
JDBC_NATIVE_TYPE
The key for attribute descriptor user data which specifies the original database column data type, as aTypes
value.- See Also:
-
JDBC_COLUMN_ALIAS
Used to specify the column alias to use when encoding a column in a select- See Also:
-
JDBC_ENUM_MAP
Contains aEnumMapping
to support enums- See Also:
-
GEOMETRY_TABLE
name of table to use to store geometries whenassociations
is set.- See Also:
-
MULTI_GEOMETRY_TABLE
name of table to use to store multi geometries made up of non-multi geometries whenassociations
is set.- See Also:
-
GEOMETRY_ASSOCIATION_TABLE
name of table to use to store geometry associations whenassociations
is set.- See Also:
-
FEATURE_RELATIONSHIP_TABLE
name of table to use to store feature relationships (information about associations) whenassociations
is set.- See Also:
-
FEATURE_ASSOCIATION_TABLE
name of table to use to store feature associations whenassociations
is set.- See Also:
-
EMPTY_ENVELOPE
The envelope returned when bounds is called against a geometryless feature type -
MAX_IDS_IN_FILTER
public static final int MAX_IDS_IN_FILTERMax number of ids to use for the optimized locks checking filter.- See Also:
-
dataSource
data source -
dialect
the dialect of sql -
databaseSchema
The database schema. -
sqlTypeToClassMappings
sql type to java class mappings -
sqlTypeNameToClassMappings
sql type name to java class mappings -
classToSqlTypeMappings
java class to sql type mappings; -
sqlTypeToSqlTypeNameOverrides
sql type to sql type name overrides -
dBsqlTypesCache
cache of sqltypes found in database -
aggregateFunctions
Feature visitor to aggregate function name -
supportedFunctions
java supported filter function mappings to dialect name; -
associations
protected boolean associationsflag controlling if the datastore is supporting feature and geometry relationships with associations -
fetchSize
public int fetchSizeThe fetch size for this datastore, defaulting to 1000. Set to a value less or equal to 0 to disable fetch size limit and grab all the records in one shot. -
batchInsertSize
protected int batchInsertSizeThe number of features to bufferize while inserting in order to do batch inserts.By default 1 to avoid backward compatibility with badly written code that forgets to close the JDBCInsertFeatureWriter or does it after closing the DB connection.
-
exposePrimaryKeyColumns
protected boolean exposePrimaryKeyColumnsflag controlling whether primary key columns of a table are exposed via the feature type. -
Finds the primary key definitions (instantiated here because the finders might keep state)
-
virtualTables
Contains the SQL definition of the various virtual tables -
connectionLifecycleListeners
The listeners that are allowed to handle the connection lifecycle -
callbackFactory
-
-
Constructor Details
-
JDBCDataStore
public JDBCDataStore()
-
-
Method Details
-
setCallbackFactory
-
getCallbackFactory
-
getAbsoluteFeatureSource
- Throws:
IOException
-
createVirtualTable
Adds a virtual table to the data store. If a virtual table with the same name was registered- Throws:
IOException
- If the view definition is not valid
-
getConnectionLifecycleListeners
Returns a modifiable list of connection lifecycle listeners -
dropVirtualTable
Removes and returns the specified virtual table -
getVirtualTables
Returns a live, immutable view of the virtual tables map (from name to definition) -
getPrimaryKeyFinder
Returns the finder used to buildPrimaryKey
representations -
setPrimaryKeyFinder
Sets the finder used to buildPrimaryKey
representations -
getFetchSize
public int getFetchSize()The current fetch size. The fetch size influences how many records are read from the dbms at a time. If set to a value less or equal than zero, all the records will be read in one shot, severily increasing the memory requirements to read a big number of features. -
setFetchSize
public void setFetchSize(int fetchSize) Changes the fetch size. -
getBatchInsertSize
public int getBatchInsertSize()- Returns:
- the number of features to bufferize while inserting in order to do batch inserts.
-
setBatchInsertSize
public void setBatchInsertSize(int batchInsertSize) Set the number of features to bufferize while inserting in order to do batch inserts.Warning: when changing this value from its default of 1, the behavior of the
JDBCInsertFeatureWriter
is changed in non backward compatible ways. If your code closes the writer before closing the connection, you are fine. Plus, the feature added events will be delayed until a batch is actually inserted. -
isExposePrimaryKeyColumns
public boolean isExposePrimaryKeyColumns()Determines if the datastore creates feature types which include those columns / attributes which compose the primary key. -
setExposePrimaryKeyColumns
public void setExposePrimaryKeyColumns(boolean exposePrimaryKeyColumns) Sets the flag controlling if the datastore creates feature types which include those columns / attributes which compose the primary key. -
getSQLDialect
The dialect the datastore uses to generate sql statements in order to communicate with the underlying database.- Returns:
- The dialect, never
null
.
-
setSQLDialect
Sets the dialect the datastore uses to generate sql statements in order to communicate with the underlying database.- Parameters:
dialect
- The dialect, nevernull
.
-
getDataSource
The data source the datastore uses to obtain connections to the underlying database.- Returns:
- The data source, never
null
.
-
setDataSource
Sets the data source the datastore uses to obtain connections to the underlying database.- Parameters:
dataSource
- The data source, nevernull
.
-
getDatabaseSchema
The schema from which this datastore is serving tables from.- Returns:
- the schema, or
null
if non specified.
-
setDatabaseSchema
Set the database schema for the datastore.When this value is set only those tables which are part of the schema are served through the datastore. This value can be set to
null
to specify no particular schema.- Parameters:
databaseSchema
- The schema, may benull
.
-
getFilterCapabilities
The filter capabilities which reports which spatial operations the underlying database can handle natively.- Returns:
- The filter capabilities, never
null
.
-
isAssociations
public boolean isAssociations()Flag controlling if the datastore is supporting feature and geometry relationships with associations -
setAssociations
public void setAssociations(boolean foreignKeyGeometries) Sets the flag controlling if the datastore is supporting feature and geometry relationships with associations -
getSqlTypeToClassMappings
The sql type to java type mappings that the datastore uses when reading and writing objects to and from the database.These mappings are derived from
SQLDialect.registerSqlTypeToClassMappings(java.util.Map)
- Returns:
- The mappings, never
null
.
-
getSqlTypeNameToClassMappings
The sql type name to java type mappings that the dialect uses when reading and writing objects to and from the database.These mappings are derived from
SQLDialect.registerSqlTypeNameToClassMappings(Map)
- Returns:
- The mappings, never
null
.
-
getClassToSqlTypeMappings
The java type to sql type mappings that the datastore uses when reading and writing objects to and from the database.These mappings are derived from
SQLDialect.registerClassToSqlMappings(Map)
- Returns:
- The mappings, never
null
.
-
getSqlTypeToSqlTypeNameOverrides
Returns any ovverides which map integer constants for database types (fromTypes
) to database type names.This method will return an empty map when there are no overrides.
-
getDBsqlTypesCache
Returns a map integer constants for database types (fromTypes
) to database type names.This method will return an empty map when there are no overrides.
-
getAggregateFunctions
Returns the supported aggregate functions and the visitors they map to. -
getMapping
Returns the java type mapped to the specified sql type.If there is no such type mapped to sqlType,
null
is returned.- Parameters:
sqlType
- The integer constant for the sql type fromTypes
.- Returns:
- The mapped java class, or
null
. if no such mapping exists.
-
getMapping
Returns the java type mapped to the specified sql type name.If there is no such type mapped to sqlTypeName,
null
is returned.- Parameters:
sqlTypeName
- The name of the sql type.- Returns:
- The mapped java class, or
null
. if no such mapping exists.
-
getMapping
Returns the sqlType of the given attribute, if present. Falls back to sqlType of class. Considering the specific attribute first, enables binding multiple sqlTypes to a single class.- Parameters:
binding
-d
- optional descriptor- Returns:
- sqlType or Types.OTHER if no such mapping exists.
-
getMapping
Returns the sql type mapped to the specified java type.If there is no such type mapped to clazz,
Types.OTHER
is returned.- Parameters:
clazz
- The java class.- Returns:
- The mapped sql type from
Types
, Types.OTHER if no such mapping exists.
-
createSchema
Creates a table in the underlying database from the specified table.This method will map the classes of the attributes of featureType to sql types and generate a 'CREATE TABLE' statement against the underlying database.
- Specified by:
createSchema
in interfaceDataAccess<SimpleFeatureType,
SimpleFeature> - Overrides:
createSchema
in classContentDataStore
- Parameters:
featureType
- FetureType to add to DataStore- Throws:
IllegalArgumentException
- If the table already exists.IOException
- If the table cannot be created due to an error.- See Also:
-
DataStore#createSchema(SimpleFeatureType)
-
removeSchema
Description copied from interface:DataStore
Used to permanently remove a schema from the underlying storageThis functionality is similar to an "drop table" statement in SQL. Implementation is optional; it may not be supported by all servers or files.
- Specified by:
removeSchema
in interfaceDataStore
- Overrides:
removeSchema
in classContentDataStore
- Throws:
IOException
- if the operation failed- See Also:
-
removeSchema
Description copied from interface:DataAccess
Used to permanently remove a schema from the underlying storageThis functionality is similar to an "drop table" statement in SQL. Implementation is optional; it may not be supported by all servers or files.
- Specified by:
removeSchema
in interfaceDataAccess<SimpleFeatureType,
SimpleFeature> - Overrides:
removeSchema
in classContentDataStore
- Throws:
IOException
- if the operation failed- See Also:
-
getGmlObject
Description copied from interface:GmlObjectStore
Looks up an object by its gml id.This method returns
null
if no such object exists.- Specified by:
getGmlObject
in interfaceGmlObjectStore
- Parameters:
id
- The id of the object, must not benull
.hints
- Any hints to use when looking up the gml object, this value may benull
.- Returns:
- The gml object, or
null
if one could not be found matching the specified id. - Throws:
IOException
- Any I/O errors that occur.
-
createFeatureSource
Creates a new instance ofJDBCFeatureStore
.- Specified by:
createFeatureSource
in classContentDataStore
- Parameters:
entry
- The entry.- Returns:
- An new instance of
ContentFeatureSource
for the entry. - Throws:
IOException
- See Also:
-
createContentState
Creates an instanceofJDBCState
.- Overrides:
createContentState
in classContentDataStore
- Parameters:
entry
- The entry.- Returns:
- A new instance of
ContentState
for the entry. - See Also:
-
createTypeNames
Generates the list of type names provided by the database.The list is generated from the underlying database metadata.
- Specified by:
createTypeNames
in classContentDataStore
- Returns:
- A list of
Name
. - Throws:
IOException
- Any errors occuring connecting to data.
-
getPrimaryKey
Returns the primary key object for a particular entry, deriving it from the underlying database metadata.- Throws:
IOException
-
getColumnType
protected Class getColumnType(DatabaseMetaData metaData, String databaseSchema2, String tableName, String columnName) throws SQLException Returns the type of the column by inspecting the metadata, with the collaboration of the dialect- Throws:
SQLException
-
getPrimaryKey
Returns the primary key object for a particular feature type / table, deriving it from the underlying database metadata.- Throws:
IOException
-
isExposePrimaryKeyColumns
Returns the expose primary key columns flag for the specified feature type- Throws:
IOException
-
getBounds
protected ReferencedEnvelope getBounds(SimpleFeatureType featureType, Query query, Connection cx) throws IOException Returns the bounds of the features for a particular feature type / table.- Parameters:
featureType
- The feature type / table.query
- Specifies rows to include in bounds calculation, as well as how many features and the offset if needed- Throws:
IOException
-
getCount
protected int getCount(SimpleFeatureType featureType, Query query, Connection cx) throws IOException Returns the count of the features for a particular feature type / table.- Throws:
IOException
-
getAggregateValue
protected Object getAggregateValue(FeatureVisitor visitor, SimpleFeatureType featureType, Query query, Connection cx) throws IOException Results the value of an aggregate function over a query.- Returns:
- generated result, or null if unsupported
- Throws:
IOException
-
isCountVisitor
-
isGroupByVisitor
Helper method the checks if a feature visitor is a group by visitor,- Parameters:
visitor
- the feature visitor- Returns:
- TRUE if the visitor is a group by visitor otherwise FALSE
-
matchAggregateFunction
Helper method that will try to match a feature visitor with an aggregate function. If no aggregate function machs the visitor NULL will be returned.- Parameters:
visitor
- the feature visitor- Returns:
- the match aggregate function name, or NULL if no match
-
extractGroupByExpressions
Helper method that extracts a list of group by attributes from a group by visitor. If the visitor is not a group by visitor an empty list will be returned.- Parameters:
visitor
- the feature visitor- Returns:
- the list of the group by attributes or an empty list
-
extractValuesFromResultSet
protected GroupByVisitor.GroupByRawResult extractValuesFromResultSet(Connection cx, SimpleFeatureType featureType, ResultSet resultSet, List<Expression> groupBy, Function<Object, Object> converter, Hints hints) throws SQLException, IOExceptionHelper method that translate the result set to the appropriate group by visitor result format- Throws:
SQLException
IOException
-
insert
protected void insert(SimpleFeature feature, SimpleFeatureType featureType, Connection cx) throws IOException Inserts a new feature into the database for a particular feature type / table.- Throws:
IOException
-
insert
protected void insert(Collection<? extends SimpleFeature> features, SimpleFeatureType featureType, Connection cx) throws IOException Inserts a collection of new features into the database for a particular feature type / table.- Throws:
IOException
-
update
protected void update(SimpleFeatureType featureType, List<AttributeDescriptor> attributes, List<Object> values, Filter filter, Connection cx) throws IOException, SQLException Updates an existing feature(s) in the database for a particular feature type / table.- Throws:
IOException
SQLException
-
update
protected void update(SimpleFeatureType featureType, AttributeDescriptor[] attributes, Object[] values, Filter filter, Connection cx) throws IOException, SQLException Updates an existing feature(s) in the database for a particular feature type / table.- Throws:
IOException
SQLException
-
delete
Deletes an existing feature in the database for a particular feature type / fid.- Throws:
IOException
-
delete
protected void delete(SimpleFeatureType featureType, Filter filter, Connection cx) throws IOException Deletes an existing feature(s) in the database for a particular feature type / table.- Throws:
IOException
-
getConnection
Returns a JDBC Connection to the underlying database for the specified GeoToolsTransaction
. This has two main use cases:- Independently accessing the underlying database directly reusing the connection pool contained in the
JDBCDataStore
- Performing some direct access to the database in the same JDBC transaction as the Geotools code
- If the transaction is
Transaction.AUTO_COMMIT
or if the transaction is not shared with this data store and originatingFeatureStore
objects it is the duty of the caller to properly close the connection after usage, failure to do so will result in the connection pool loose one available connection permanently - If the transaction is on the other side a valid transaction is shared with Geotools the client code should
refrain from closing the connection, committing or rolling back, and use the
Transaction
facilities to do so instead
- Parameters:
t
- The GeoTools transaction, can not be null- Throws:
IOException
- Independently accessing the underlying database directly reusing the connection pool contained in the
-
getConnection
Gets a database connection for the specified feature store.- Throws:
IOException
-
createConnection
Creates a new connection.Callers of this method should close the connection when done with it. .
-
releaseConnection
Releases an existing connection (paying special attention toTransaction.AUTO_COMMIT
.If the state is based off the AUTO_COMMIT transaction - close using
closeSafe(Connection)
. Otherwise wait until the transaction itself is closed to close the connection. -
encodeFID
Calls through to:encodeFID(pkey, rs, 0);
- Throws:
SQLException
IOException
-
encodeFID
protected String encodeFID(PrimaryKey pkey, ResultSet rs, int offset) throws SQLException, IOException Encodes a feature id from a primary key and result set values.offset specifies where in the result set to start from when reading values for the primary key.
- Throws:
SQLException
IOException
-
encodeFID
-
decodeFID
Decodes a fid into its components based on a primary key.- Parameters:
strict
- If set to true the value of the fid will be validated against the type of the key columns. If a conversion can not be made, an exception will be thrown.
-
isGenerated
Determines if a primary key is made up entirely of column which are generated via an auto-generating column or a sequence. -
createTableSQL
Generates a 'CREATE TABLE' sql statement.- Throws:
Exception
-
findPrimaryKeyColumnName
-
dropTableSQL
Generates a 'DROP TABLE' sql statement.- Throws:
Exception
-
ensureAuthorization
protected void ensureAuthorization(SimpleFeatureType featureType, Filter filter, Transaction tx, Connection cx) throws IOException, SQLException Ensures that that the specified transaction has access to features specified by a filter.If any features matching the filter are locked, and the transaction does not have authorization with respect to the lock, an exception is thrown.
- Parameters:
featureType
- The feature type / table.filter
- The filters.tx
- The transaction.cx
- The database connection.- Throws:
IOException
SQLException
-
ensureAssociationTablesExist
Helper method for creating geometry association table if it does not exist.- Throws:
IOException
SQLException
-
createRelationshipTableSQL
Creates the sql for the relationship table.This method is only called when
isAssociations()
is true.- Throws:
SQLException
-
createAssociationTableSQL
Creates the sql for the association table.This method is only called when
isAssociations()
is true.- Throws:
SQLException
-
createGeometryTableSQL
Creates the sql for the geometry table.This method is only called when
isAssociations()
is true.- Throws:
SQLException
-
createMultiGeometryTableSQL
Creates the sql for the multi_geometry table.This method is only called when
isAssociations()
is true.- Throws:
SQLException
-
selectRelationshipSQL
Creates the sql for the relationship table.This method is only called when
isAssociations()
is true.- Parameters:
table
- The table of the associationcolumn
- The column of the association- Throws:
SQLException
-
selectRelationshipSQLPS
protected PreparedStatement selectRelationshipSQLPS(String table, String column, Connection cx) throws SQLException Creates the prepared statement for a query against the relationship table.This method is only called when
isAssociations()
is true.- Parameters:
table
- The table of the associationcolumn
- The column of the association- Throws:
SQLException
-
selectAssociationSQL
Creates the sql for the association table.This method is only called when
isAssociations()
is true.- Parameters:
fid
- The feature id of the association- Throws:
SQLException
-
selectAssociationSQLPS
Creates the prepared statement for the association table.This method is only called when
isAssociations()
is true.- Parameters:
fid
- The feature id of the association- Throws:
SQLException
-
selectGeometrySQL
Creates the sql for a select from the geometry table.This method is only called when
isAssociations()
is true.- Parameters:
gid
- The geometry id to select for, may benull
- Throws:
SQLException
-
selectGeometrySQLPS
Creates the prepared for a select from the geometry table.This method is only called when
isAssociations()
is true.- Parameters:
gid
- The geometry id to select for, may benull
- Throws:
SQLException
-
selectMultiGeometrySQL
Creates the sql for a select from the multi geometry table.This method is only called when
isAssociations()
is true.- Parameters:
gid
- The geometry id to select for, may benull
.- Throws:
SQLException
-
selectMultiGeometrySQLPS
Creates the prepared statement for a select from the multi geometry table.This method is only called when
isAssociations()
is true.- Parameters:
gid
- The geometry id to select for, may benull
.- Throws:
SQLException
-
createGeometryAssociationTableSQL
Creates the sql for the geometry association table.This method is only called when
isAssociations()
is true.- Throws:
SQLException
-
selectGeometryAssociationSQL
protected String selectGeometryAssociationSQL(String fid, String gid, String gname) throws SQLException Creates the sql for a select from the geometry association table.- Parameters:
fid
- The fid to select for, may benull
gid
- The geometry id to select for, may benull
gname
- The geometry name to select for, may benull
- Throws:
SQLException
-
selectGeometryAssociationSQLPS
protected PreparedStatement selectGeometryAssociationSQLPS(String fid, String gid, String gname, Connection cx) throws SQLException Creates the prepared statement for a select from the geometry association table.- Parameters:
fid
- The fid to select for, may benull
gid
- The geometry id to select for, may benull
gname
- The geometry name to select for, may benull
- Throws:
SQLException
-
selectSQL
protected String selectSQL(SimpleFeatureType featureType, Query query) throws IOException, SQLException Generates a 'SELECT p1, p2, ... FROM ... WHERE ...' statement.- Parameters:
featureType
- the feature type that the query must return (may contain less attributes than the native one)query
- the query to be run. The type name and property will be ignored, as they are supposed to have been already embedded into the provided feature type- Throws:
IOException
SQLException
-
selectJoinSQL
protected String selectJoinSQL(SimpleFeatureType featureType, JoinInfo join, Query query) throws IOException, SQLException - Throws:
IOException
SQLException
-
selectSQLPS
protected PreparedStatement selectSQLPS(SimpleFeatureType featureType, Query query, Connection cx) throws SQLException, IOException Generates a 'SELECT p1, p2, ... FROM ... WHERE ...' prepared statement.- Parameters:
featureType
- the feature type that the query must return (may contain less attributes than the native one)query
- the query to be run. The type name and property will be ignored, as they are supposed to have been already embedded into the provided feature typecx
- The database connection to be used to create the prepared statement- Throws:
SQLException
IOException
-
selectJoinSQLPS
protected PreparedStatement selectJoinSQLPS(SimpleFeatureType featureType, JoinInfo join, Query query, Connection cx) throws SQLException, IOException - Throws:
SQLException
IOException
-
setPreparedFilterValues
protected void setPreparedFilterValues(PreparedStatement ps, List<FilterToSQL> toSQLs, Connection cx) throws SQLException Helper method for setting the values of the WHERE class of a prepared statement from a list of PreparedFilterToSQL.- Throws:
SQLException
-
setPreparedFilterValues
public void setPreparedFilterValues(PreparedStatement ps, PreparedFilterToSQL toSQL, int offset, Connection cx) throws SQLException Helper method for setting the values of the WHERE class of a prepared statement.- Throws:
SQLException
-
getPropertyName
Helper method for executing a property name against a feature type.This method will fall back on
PropertyName.getPropertyName()
if it does not evaulate against the feature type. -
selectBoundsSQL
protected String selectBoundsSQL(SimpleFeatureType featureType, Query query) throws SQLException, IOException Generates a 'SELECT' sql statement which selects bounds.- Parameters:
featureType
- The feature type / table.query
- Specifies which features are to be used for the bounds computation (and in particular uses filter, start index and max features)- Throws:
SQLException
IOException
-
selectBoundsSQLPS
protected PreparedStatement selectBoundsSQLPS(SimpleFeatureType featureType, Query query, Connection cx) throws SQLException Generates a 'SELECT' prepared statement which selects bounds.- Parameters:
featureType
- The feature type / table.query
- Specifies which features are to be used for the bounds computation (and in particular uses filter, start index and max features)cx
- A database connection.- Throws:
SQLException
-
selectAggregateSQL
protected String selectAggregateSQL(String function, List<Expression> attributes, List<Expression> groupByExpressions, SimpleFeatureType featureType, Query query, LimitingVisitor visitor) throws SQLException, IOException - Throws:
SQLException
IOException
-
selectAggregateSQLPS
protected PreparedStatement selectAggregateSQLPS(String function, List<Expression> attributes, List<Expression> groupByExpressions, SimpleFeatureType featureType, Query query, LimitingVisitor visitor, Connection cx) throws SQLException, IOException - Throws:
SQLException
IOException
-
encodeGroupByStatement
protected void encodeGroupByStatement(List<Expression> groupByExpressions, StringBuffer sql, FilterToSQL filterToSQL, boolean aggregateOnExpression) Helper method that adds a group by statement to the SQL query. If the list of group by attributes is empty or NULL no group by statement is add.- Parameters:
groupByExpressions
- the group by attributes to be encodedsql
- the sql query buffer
-
encodeFunction
protected void encodeFunction(String function, Expression expression, StringBuffer sql, FilterToSQL filterToSQL) -
encodeFunction
protected void encodeFunction(String function, List<Expression> expressions, StringBuffer sql, FilterToSQL filterToSQL) -
deleteSQL
Generates a 'DELETE FROM' sql statement.- Throws:
SQLException
-
deleteSQLPS
protected PreparedStatement deleteSQLPS(SimpleFeatureType featureType, Filter filter, Connection cx) throws SQLException Generates a 'DELETE FROM' prepared statement.- Throws:
SQLException
-
insertSQL
protected String insertSQL(SimpleFeatureType featureType, SimpleFeature feature, KeysFetcher keysFetcher, Connection cx) throws SQLException, IOException Generates a 'INSERT INFO' sql statement.- Throws:
SQLException
IOException
-
getColumnNames
Returns the set of the primary key column names. The set is guaranteed to have the same iteration order as the primary key. -
getGeometrySRID
Looks up the geometry srs by trying a number of heuristics. Returns -1 if all attempts at guessing the srid failed.- Throws:
IOException
-
getGeometryDimension
Looks up the geometry dimension by trying a number of heuristics. Returns 2 if all attempts at guessing the dimension failed.- Throws:
IOException
-
getDescriptorSRID
Extracts the eventual native SRID user property from the descriptor, returns -1 if not found -
getDescriptorDimension
Extracts the eventual native dimension user property from the descriptor, returns -1 if not found -
updateSQL
protected String updateSQL(SimpleFeatureType featureType, AttributeDescriptor[] attributes, Object[] values, Filter filter, Set<String> pkColumnNames) throws IOException, SQLException Generates an 'UPDATE' sql statement.- Throws:
IOException
SQLException
-
updateSQLPS
protected PreparedStatement updateSQLPS(SimpleFeatureType featureType, AttributeDescriptor[] attributes, Object[] values, Filter filter, Set<String> pkColumnNames, Connection cx) throws IOException, SQLException Generates an 'UPDATE' prepared statement.- Throws:
IOException
SQLException
-
createFilterToSQL
Creates a new instance of a filter to sql encoder.The featureType may be null but it is not recommended. Such a case where this may neccessary is when a literal needs to be encoded in isolation.
-
createPreparedFilterToSQL
Creates a new instance of a filter to sql encoder to be used in a prepared statement. -
initializeFilterToSQL
Helper method to initialize a filter encoder instance. -
encodeTableName
Helper method to encode table name which checks if a schema is set and prefixes the table name with it.- Throws:
SQLException
-
encodeAliasedTableName
public void encodeAliasedTableName(String tableName, StringBuffer sql, Hints hints, String alias) throws SQLException Helper method to encode table name which checks if a schema is set and prefixes the table name with it, with the addition of an alias to the name- Throws:
SQLException
-
encodeTableJoin
protected void encodeTableJoin(SimpleFeatureType featureType, JoinInfo join, Query query, StringBuffer sql) throws SQLException Helper method to encode the join clause(s) of a query.- Throws:
SQLException
-
encodeWhereJoin
protected List<FilterToSQL> encodeWhereJoin(SimpleFeatureType featureType, JoinInfo join, StringBuffer sql) throws IOException - Throws:
IOException
-
setGmlProperties
Helper method for setting the gml:id of a geometry as user data. -
applyLimitOffset
Applies the limit/offset elements to the query if they are specified and if the dialect supports them- Parameters:
sql
- The sql to be modifiedquery
- the query that holds the limit and offset parameters
-
closeSafe
Utility method for closing a result set.This method closed the result set "safely" in that it never throws an exception. Any exceptions that do occur are logged at
Level.FINER
.- Parameters:
rs
- The result set to close.
-
closeSafe
Utility method for closing a statement.This method closed the statement"safely" in that it never throws an exception. Any exceptions that do occur are logged at
Level.FINER
.- Parameters:
st
- The statement to close.
-
closeSafe
Utility method for closing a connection.This method closed the connection "safely" in that it never throws an exception. Any exceptions that do occur are logged at
Level.FINER
.- Parameters:
cx
- The connection to close.
-
finalize
-
dispose
public void dispose()Description copied from interface:DataAccess
Disposes of this data store and releases any resource that it is using.A
DataStore
cannot be used afterdispose
has been called, neither can any data access object it helped create, such asFeatureReader
,FeatureSource
orFeatureCollection
.This operation can be called more than once without side effects.
There is no thread safety assurance associated with this method. For example, client code will have to make sure this method is not called while retrieving/saving data from/to the storage, or be prepared for the consequences.
- Specified by:
dispose
in interfaceDataAccess<SimpleFeatureType,
SimpleFeature> - Overrides:
dispose
in classContentDataStore
-
isGeneralizationRequired
Checks if geometry generalization required and makes sense- Parameters:
hints
- hints hints passed ingatt
- Geometry attribute descriptor- Returns:
- true to indicate generalization
-
isSimplificationRequired
Checks if geometry simplification required and makes sense- Parameters:
hints
- hints hints passed ingatt
- Geometry attribute descriptor- Returns:
- true to indicate simplification
-
isGeometryReduceRequired
Checks if reduction required and makes sense- Parameters:
hints
- hints passed ingatt
- Geometry attribute descriptorparam
-Hints.GEOMETRY_GENERALIZATION
orHints.GEOMETRY_SIMPLIFICATION
- Returns:
- true to indicate reducing the geometry, false otherwise
-
encodeGeometryColumn
Encoding a geometry column with respect to hints Supported Hints are provided bySQLDialect.addSupportedHints(Set)
- Parameters:
hints
- , may be null
-
encodeGeometryColumn
protected void encodeGeometryColumn(GeometryDescriptor gatt, String prefix, StringBuffer sql, Hints hints) -
buildTransaction
Builds a transaction object around a user provided connection. The returned transaction allows the store to work against an externally managed transaction, such as in J2EE enviroments. It is the duty of the caller to ensure the connection is to the same database managed by thisJDBCDataStore
.Calls to
Transaction.commit()
,Transaction.rollback()
andTransaction.close()
will not result in corresponding calls to the providedConnection
object.- Parameters:
cx
- The externally managed connection
-
createIndex
Creates a new database index- Throws:
IOException
-
dropIndex
Creates a new database index- Throws:
IOException
-
getIndexes
Lists all indexes associated to the given feature type- Parameters:
typeName
- Name of the type for which indexes are searched. It's mandatory- Throws:
IOException
-
escapeNamePattern
Escapes a name pattern used in e.g.DatabaseMetaData.getColumns(String, String, String, String)
when passed in argument is an exact name and not a pattern.When a table name or column name contains underscore (or percen, but this is rare) the underscore is treated as a placeholder and not an actual character. So if our intention is to match an exact name, we must escape such characters.
- Throws:
SQLException
-