Class DriverWrapper

  • All Implemented Interfaces:
    Driver

    @NonNullByDefault({PARAMETER,RETURN_TYPE})
    public class DriverWrapper
    extends org.postgresql.Driver
    Wraps the PostGreSQL Driver to transparently add the PostGIS Object Classes. This avoids the need of explicit addDataType() calls from the driver users side.

    This method currently works with J2EE DataSource implementations, and with DriverManager framework.

    Simply replace the "jdbc:postgresql:" with a "jdbc:postgresql_postGIS:" in the jdbc URL.

    When using the drivermanager, you need to initialize DriverWrapper instead of (or in addition to) Driver. When using a J2EE DataSource implementation, set the driver class property in the datasource config, the following works for jboss: <driver-class>io.github.sebasbaumh.postgis.DriverWrapper</driver-class>

    If you don't like or want to use the DriverWrapper, you can just call registerDataTypes(Connection) on your Connection.

    This wrapper always uses EWKB as representation, and thus works against PostGIS servers starting from 2.3.

    original author Markus Schaber <[email protected]>

    reworked by Sebastian Baumhekel

    • Constructor Detail

      • DriverWrapper

        public DriverWrapper()
        Default constructor.
    • Method Detail

      • registerDataTypes

        public static void registerDataTypes​(org.postgresql.PGConnection pgconn)
                                      throws SQLException
        Registers all datatypes on the given connection.
        Parameters:
        pgconn - PGConnection
        Throws:
        SQLException
      • registerDataTypesForBinaryTransfer

        public static void registerDataTypesForBinaryTransfer​(Connection conn)
                                                       throws SQLException
        Registers all datatypes for binary transfer on the given connection, supports wrapped connections.

        NOTE: this is experimental and only necessary until PostgreSQL JDBC driver is able to register types for binary transfer.

        Parameters:
        conn - Connection
        Throws:
        SQLException - if the Connection is no BaseConnection.
      • acceptsURL

        public boolean acceptsURL​(@Nonnull
                                  String url)
        Check whether the driver thinks he can handle the given URL.
        Specified by:
        acceptsURL in interface Driver
        Overrides:
        acceptsURL in class org.postgresql.Driver
        Parameters:
        url - the URL of the driver
        Returns:
        true if this driver accepts the given URL
        See Also:
        Driver.acceptsURL(java.lang.String)
      • connect

        @Nullable
        public Connection connect​(@Nonnull
                                  String url,
                                  @Nonnull
                                  Properties info)
                           throws SQLException
        Creates a postgresql connection, and then adds the PostGIS data types to it calling addpgtypes()
        Specified by:
        connect in interface Driver
        Overrides:
        connect in class org.postgresql.Driver
        Parameters:
        url - the URL of the database to connect to
        info - a list of arbitrary tag/value pairs as connection arguments
        Returns:
        a connection to the URL or null if it isnt us
        Throws:
        SQLException - if a database access error occurs
        See Also:
        Driver.connect(java.lang.String, java.util.Properties), Driver
      • getParentLogger

        public Logger getParentLogger()
        Specified by:
        getParentLogger in interface Driver
        Overrides:
        getParentLogger in class org.postgresql.Driver