我试图在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的替代品。
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"的痕迹。
感谢您的帮助
当我重新启动容器时,我的问题消失了。我无法解释为什么会这样。