Re: DriverManager.registerDriver - registers twice? - Mailing list pgsql-jdbc

From Dave Cramer
Subject Re: DriverManager.registerDriver - registers twice?
Date
Msg-id CADK3HH+J3EXL08R5fyTw-B=e106wam4J0GEHjbL-33jGuxp1HQ@mail.gmail.com
Whole thread Raw
In response to Re: DriverManager.registerDriver - registers twice?  (David Wall <d.wall@computer.org>)
List pgsql-jdbc
AFAIK it doesn't deregister. 

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca


On 21 July 2014 23:27, David Wall <d.wall@computer.org> wrote:
Perhaps I've answered my own question.  Looks like I really only need to do the Class.forName() call and the driver will register itself.

That leads to the question when will the driver deregister itself?  We previously did the register and deregister ourselves,  but if the driver is registering on its own, how does it know to deregister (such as when my webapp is stopped)?



On 7/21/2014 6:14 PM, David Wall wrote:
I have code like the following:

            Class<?> driverClass = Class.forName("org.postgresql.Driver");
            driver = (java.sql.Driver)driverClass.newInstance();
            DriverManager.registerDriver(driver);

When I check before this code to see what driver's are available via DriverManager.getDrivers(), it reports this (note there's only one non-PG driver for JDBC/ODBC):

18:03:14 BEFORE REGISTER DriverManager.getDrivers() returned driver: sun.jdbc.odbc.JdbcOdbcDriver@3315a56d name: sun.jdbc.odbc.JdbcOdbcDriver; accepts URL jdbc:postgresql://localhost.localdomain/demo: false

But right after, I show the driver instance I created, then do DriverManager.getDrivers() again, but this time I get TWO PG JDBC drivers (along with the JDBC/ODBC), the second of which matches the one I registered. 

18:03:14 DriverManager.registerDriver() org.postgresql.Driver@3086f9bf

18:03:14 AFTER REGISTER DriverManager.getDrivers() returned driver: sun.jdbc.odbc.JdbcOdbcDriver@3315a56d name: sun.jdbc.odbc.JdbcOdbcDriver; accepts URL jdbc:postgresql://localhost.localdomain/demo: false

18:03:14 AFTER REGISTER DriverManager.getDrivers() returned driver: org.postgresql.Driver@29559094 name: org.postgresql.Driver; accepts URL jdbc:postgresql://localhost.localdomain/demo: true
18:03:14 AFTER REGISTER DriverManager.getDrivers() returned driver: org.postgresql.Driver@3086f9bf name: org.postgresql.Driver; accepts URL jdbc:postgresql://localhost.localdomain/demo: true

Why are there two?  Where does the org.postgresql.Driver@29559094 instance come from?

I am running Java 1.7.0_25 with PG JDBC driver postgresql-9.2-1003.jdbc4.jar.

Thanks,
David


pgsql-jdbc by date:

Previous
From: "vjai.krishnan"
Date:
Subject: Re: Slow statement when using JDBC
Next
From: CG
Date:
Subject: Upgrade to Scientific Linux 6.5 x86_64 breaks query