Reputation: 1295
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
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
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
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