Question

I am trying to connect to an Oracle Database using the java.sql.DriverManager in a JSF application. I am using a Tomcat v7 with ojdbc5.jar.

I have a very simple sample project that consists of nothing else than this piece of java code:

    String url = "jdbc:oracle:thin:@DBSERV:DBPORT:DBSID";
    String user = "account_admin";
    String password = "my_assword";

    Connection connection = null;
    try {

        Class.forName("oracle.jdbc.OracleDriver");

        connection = DriverManager.getConnection(url, user, password);
        connection.close();

    } catch ..
            ...

Executed I get the following error:

java.lang.NoClassDefFoundError: Could not initialize class oracle.jdbc.driver.OracleDriver

Infact the class specified there "oracle.jdbc.driver.OracleDriver" is deprecated...and I can't change the Tomcat configuration. Therefore I specified "oracle.jdbc.OracleDriver" which loads just fine.

So the question is: Why does the DriverManager tries to load the "wrong" oracle driver, although I am loading another one?

I also tried as an alternative to Class.forName the following:

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

That does not change anything though. I also checked for the registered drivers in the following way:

        Enumeration<Driver> driverList = DriverManager.getDrivers();
        while(driverList.hasMoreElements()){
            Driver driver = driverList.nextElement();
            System.out.println(driver.getClass().toString());
        }

The output:

class sun.jdbc.odbc.JdbcOdbcDriver
class oracle.jdbc.OracleDriver

So the desired driver seems to be registered, no trace of the deprecated "oracle.jdbc.driver.OracleDriver".

Thank you for any help

Was it helpful?

Solution

My problem just disappeared when I restarted the container. I can't explain why that is though.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top