JDBC DriverManager尝试使用非指定的Oracle驱动程序

时间:2014-05-07 15:02:24

标签: database oracle jsf tomcat jdbc

我正在尝试使用JSF应用程序中的java.sql.DriverManager连接到Oracle数据库。我正在使用带有ojdbc5.jar的Tomcat v7。

我有一个非常简单的示例项目,除了这段java代码之外别无其他:

    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 ..
            ...

已执行我收到以下错误:

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

事实上,那里指定的类“oracle.jdbc.driver.OracleDriver”已被弃用......我无法更改Tomcat配置。因此我指定了“oracle.jdbc.OracleDriver”加载就好了。

所以问题是:为什么DriverManager会尝试加载“错误的”oracle驱动程序,虽然我正在加载另一个?

我还尝试过将Class.forName替换为以下内容:

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

但这并没有改变任何事情。我还通过以下方式检查了注册的驱动程序:

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

输出:

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

因此,所需的驱动程序似乎已注册,没有被弃用的“oracle.jdbc.driver.OracleDriver”的痕迹。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

当我重新启动容器时,我的问题就消失了。我无法解释为什么会这样。