我正在尝试使用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”的痕迹。
感谢您的帮助
答案 0 :(得分:0)
当我重新启动容器时,我的问题就消失了。我无法解释为什么会这样。