【问题标题】:Error creating bean ... could not load JDBC driver class [oracle.jdbc.driver.OracleDriver]创建 bean 时出错...无法加载 JDBC 驱动程序类 [oracle.jdbc.driver.OracleDriver]
【发布时间】:2012-06-11 11:11:48
【问题描述】:

我已编写代码在 Spring 上使用 JDBC 运行查询,但出现异常(见下文)

这是我的 context.xml

 <bean id="dataSource" 
       class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
   <property name="url" value="jdbc:oracle:thin:@Mohsen-PC:1521:mydb"/>
   <property name="username" value="system"/>
   <property name="password" value="123"/>    
 </bean>

 <bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
   <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
 </bean>

 <bean id="nativeJdbcExtractor" 
     class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>

 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
   <property name="dataSource" ref="dataSource"/>
 </bean>
</beans>

main.java

import javax.sql.DataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

class Main {

  public static void main(String args[]) throws Exception {

    ApplicationContext ac = new ClassPathXmlApplicationContext("context.xml");

    DataSource dataSource = (DataSource) ac.getBean("dataSource");

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

    System.out.println(jdbcTemplate.queryForList("select EMPLOYEE_ID from EMPLOYEE", 
                                                  Long.class));
  }
}

我看到的例外是:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: 
  Error creating bean with name 'dataSource' defined in class path resource [context.xml]: 
  Error setting property values; nested exception is 
  org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
  PropertyAccessException 1: org.springframework.beans.MethodInvocationException: 
  Property 'driverClassName' threw exception; nested exception is 
  java.lang.IllegalStateException: Could not load JDBC driver class 
  [oracle.jdbc.driver.OracleDriver] at 
  org.springframework.beans.factory.support.
                             AbstractAutowireCapableBeanFactory.applyPropertyValues(
                                                AbstractAutowireCapableBeanFactory.java:1396)

编辑:删除堆栈跟踪的其余部分,因为上述异常足以说明问题。

这里出了什么问题?

【问题讨论】:

  • 您是否将ojdbcxxx.jar 放入您的类路径中?
  • @adarshr,是的,org.springframework.jdbc-3.1.0.RELEASE
  • 不是这样的。您需要来自 Oracle 的 JDBC 驱动程序 JAR 文件。
  • 在我们的例子中(Spring 4、eclipse Luna、JDK 7、ojdbc6.jar),我们必须将 ojdbc jar 和 spring-jdbc.jar 添加到 /WEB-INF/lib 文件夹中,然后它开始起作用了

标签: java spring jdbc


【解决方案1】:

您的类路径中似乎缺少 oracle jdbc 驱动程序。请从this path 下载 jar 文件并将其添加到您的类路径中。

已编辑
Spring jdbc 是一个模板层,它工作在原始 jdbc 层之上。它只是为我们提供了一些实用方法,使数据库访问更容易。该层在内部需要 jdbc 层才能工作,因此您要连接到该数据库驱动程序的每个数据库也必须包含在内,在您的情况下,您需要包含 Oracle 驱动程序。

【讨论】:

  • 我已经添加了这个jar文件:org.springframework.jdbc-3.1.0.RELEASE
  • @sami 不是这样。您需要来自 Oracle 的 JDBC 驱动程序 JAR 文件。
  • Spring jdbc 是一个模板层,它工作在原始 jdbc 层之上。它只是为我们提供了一些实用方法,使数据库访问更容易。该层在内部需要 jdbc 层才能工作,因此您要连接到该数据库驱动程序的每个数据库也必须包含在内,在您的情况下,您需要包含 Oracle 驱动程序。
【解决方案2】:

看起来(Oracle 提供的)带有 JDBC 驱动程序的 jar 文件不在您的类路径中。

注意堆栈跟踪中显示的部分:“IllegalStateException:无法加载 JDBC 驱动程序类 [oracle.jdbc.driver.OracleDriver”

【讨论】:

    【解决方案3】:

    在我的情况下,问题已解决,将范围设置为 runtime

        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
            <version>7.0.0.jre8</version>
            <scope>runtime</scope>
        </dependency>
    

    参考:When would I need maven dependency with runtime scope

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 2013-07-28
      • 2021-08-23
      • 2019-12-05
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多