samira
samira

Reputation: 1295

Error creating bean ... could not load JDBC driver class [oracle.jdbc.driver.OracleDriver]

I have written code to run a query using JDBC on Spring but I get an exception (see below)

Here's my 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));
  }
}

The exception I see is:

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)

EDIT: cut remainder of stack trace as the above exception is sufficient to illuminate the problem.

What is going wrong here?

Upvotes: 4

Views: 42053

Answers (3)

Jairo Mart&#237;nez
Jairo Mart&#237;nez

Reputation: 525

In my case the problem was fixed setting the scope to runtime:

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

Reference: When would I need maven dependency with runtime scope

Upvotes: 0

Arun P Johny
Arun P Johny

Reputation: 388316

Looks like you are missing the oracle jdbc driver in your classpath. Please download the jar file from this path and add this to your classpath.

EDITED
Spring jdbc is a template layer which works on top of the raw jdbc layer. It just provides us some utility methods to make the database access easier. This layer internally needs the jdbc layer to work so which every database you want to connect to that database's driver also has to be included, in your case you need to include Oracle driver.

Upvotes: 12

GreyBeardedGeek
GreyBeardedGeek

Reputation: 30088

It looks like the (Oracle-supplied) jar file with the JDBC driver is not in your classpath.

Note the part of the stack trace that says: "IllegalStateException: Could not load JDBC driver class [oracle.jdbc.driver.OracleDriver"

Upvotes: 1

Related Questions