You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Marcin Krol <mr...@gmail.com> on 2010/05/28 18:44:58 UTC

java.sql.SQLException: No suitable driver

Hello everyone,

I'm trying to use Derby here as embedded database in our test automation 
framework (that deploys itself on the remote endpoint and executes some 
Java classes to test functionality of the product).

Code:

private void createDerbyConnection() throws ClassNotFoundException, 
SQLException
{
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
     String dburl = "jdbc:derby:DerbyDB;create=true";
     derbyconn = DriverManager.getConnection(dburl);
     derbyconn.setAutoCommit(false);
     derbyst = derbyconn.createStatement();
}


Now, the weird thing is that when the same class is using Derby in 
standalone program (ran e.g. on Linux) *on the same host*, or in Eclipse 
on my laptop, it all runs fine - I can connect to the db and operate on 
it all right.

It's only when I deploy the thing remotely, I get exception 
"java.sql.SQLException: No suitable driver" on line:

derbyconn = DriverManager.getConnection(dburl);

Note: the EmbeddedDriver jdbc class is most probably loaded fine, which 
is reinforced by the fact that if I delete derby.jar from classpath I 
get ClassNotFoundException.

Some people on the net suggested that this exception is being caused by 
wrong db url, but I can't see what's possibly wrong with my db url. I 
was under impression that this is correct dburl for embedded derby 
driver which should be in derby.jar.


-- 

Regards,
mk

--
Premature optimization is the root of all fun.

Re: java.sql.SQLException: No suitable driver

Posted by Kristian Waagan <Kr...@Sun.COM>.
On 28.05.2010 18:44, Marcin Krol wrote:
> Hello everyone,
>
> I'm trying to use Derby here as embedded database in our test 
> automation framework (that deploys itself on the remote endpoint and 
> executes some Java classes to test functionality of the product).
>
> Code:
>
> private void createDerbyConnection() throws ClassNotFoundException, 
> SQLException
> {
>     Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
>     String dburl = "jdbc:derby:DerbyDB;create=true";
>     derbyconn = DriverManager.getConnection(dburl);
>     derbyconn.setAutoCommit(false);
>     derbyst = derbyconn.createStatement();
> }
>

Hi Marcin,

Sorry for this vey vague answer, but could this have to do with 
classloaders?
Is the framwork you are using doing anything explicit about classloaders?

There is some classloader sensitive code in DriverManager.
Not sure in which context I stumbled over this, but I may have worked 
around the issue by using the Class.forName() method that takes a 
ClassLoader argument. Now, if this is the problem and the proposed fix 
is sound, you just have to figure out which classloader to use when 
loading the driver class :)


Regards,
-- 
Kristian

>
> Now, the weird thing is that when the same class is using Derby in 
> standalone program (ran e.g. on Linux) *on the same host*, or in 
> Eclipse on my laptop, it all runs fine - I can connect to the db and 
> operate on it all right.
>
> It's only when I deploy the thing remotely, I get exception 
> "java.sql.SQLException: No suitable driver" on line:
>
> derbyconn = DriverManager.getConnection(dburl);
>
> Note: the EmbeddedDriver jdbc class is most probably loaded fine, 
> which is reinforced by the fact that if I delete derby.jar from 
> classpath I get ClassNotFoundException.
>
> Some people on the net suggested that this exception is being caused 
> by wrong db url, but I can't see what's possibly wrong with my db url. 
> I was under impression that this is correct dburl for embedded derby 
> driver which should be in derby.jar.
>
>