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

Était-ce utile?

La solution

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top