Yes, driver doe's it this way :
static{
DriverManager.registerDriver( new MyDriversPrivateConstructor() );
}
> The following is from DriverManager's doc:
>
> public static Driver getDriver(String url)
> throws SQLException
>
> Attempts to locate a driver that understands the given URL. The
> DriverManager attempts to select an appropriate driver from the
> set of registered JDBC drivers.
>
>
> So to get driver via url it must be registered first.
> But to register it you have to have the driver's class instance!
>
> James House wrote:
> >
> > In the "BasicDataSource.createDataSource()" method, there are 2 serious
> > bugs in the following block of code:
> >
> > ===========================================
> > // Load the JDBC driver class
> > Class driverClass = null;
> > try {
> > driverClass = Class.forName(driverClassName);
> > } catch (Throwable t) {
> > String message = "Cannot load JDBC driver class '" +
> > driverClassName + "'";
> > getLogWriter().println(message);
> > t.printStackTrace(getLogWriter());
> > throw new SQLException(message);
> > }
> >
> > // Create a JDBC driver instance
> > Driver driver = null;
> > try {
> > driver = (Driver) driverClass.newInstance();
> > } catch (Throwable t) {
> > String message = "Cannot create JDBC driver of class '" +
> > driverClassName + "'";
> > getLogWriter().println(message);
> > t.printStackTrace(getLogWriter());
> > throw new SQLException(message);
> > }
> > ===========================================
> >
> > The if method createDataSource() encounters a problem loading or
> > instantiating the JDBC driver, it calls the method
> > getLogWriter(). getLogWriter() in turn calls createDataSource(), thus
> > creating an infinite loop, and a stack-overflow exception. Perhaps
> > createDataSource() needs to simply log it's errors to stderr ???
> >
> > The second bug in this block of code causes the creation of the data
source
> > to fail, even though there's no real problem.
> >
> > This problem stems from the fact that many JDBC drivers (well, at least
2
> > that I use regularly) do not have a public constructor, and therefore
you
> > can't call newInstance() on them. (the instantiate themselves in a
static
> > {} block, as they are loaded and registered with driver manager).
> >
> > The EASY solution is to replace the second try block body with this
call:
> >
> > driver = DriverManager.getDriver(url);
> >
> > Simple huh?
> >
> > If you want to "fix" the two bugs in the manner I've suggested, the
> > replacement of the block outlined above would be:
> > ===========================================
> > import java.sql.DriverManager;
> > ...
> >
> > // Load the JDBC driver class
> > Class driverClass = null;
> > try {
> > driverClass = Class.forName(driverClassName);
> > } catch (Throwable t) {
> > String message = "Cannot load JDBC driver class '" +
> > driverClassName + "'";
> > System.err.println(message);
> > t.printStackTrace();
> > throw new SQLException(message);
> > }
> >
> > // Create a JDBC driver instance
> > Driver driver = null;
> > try {
> > driver = DriverManager.getDriver(url);
> > } catch (Throwable t) {
> > String message = "Cannot get a reference to JDBC driver of
> > class '" +
> > driverClassName + "' - " + t.getMessage();
> > System.err.println(message);
> > t.printStackTrace();
> > throw new SQLException(message);
> > }
> > ===========================================
> >
> > BTW: I REALLY appreciate the recent changes that have made the pool
> > (getConnection()) throw SQLException.
> >
> > James
> >
> > --
> > To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
> --
> Lev Assinovsky Peterlink Web
> Programmer St. Petersburg, Russia
> Tel/Fax: +7 812 3275343 197022 ul.Chapigina 7�
> E-mail: [EMAIL PROTECTED]
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>