Sprig jdbc queryTimeOutException

时间:2015-03-21 06:34:45

标签: java spring

我有一个简单的spring jdbc程序,但是当我运行程序时,我得到一个queryTimeOut异常。

这是完整的stackTrace

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/dao/QueryTimeoutException
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:87)
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:103)
    at org.springframework.jdbc.support.JdbcAccessor.getExceptionTranslator(JdbcAccessor.java:99)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:407)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:519)
    at com.test.spring.EmployeeDao.saveEmployee(EmployeeDao.java:14)
    at com.test.spring.Test.main(Test.java:13)
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.QueryTimeoutException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 7 more

表:

create table employee(emp_name varchar2(30),address varchar2(30),salery number(10),emp_id number(10));

Employee.java:

package com.test.spring;
public class Employee {
    private String emp_name;
    private String address;
    private int salery;
    private int emp_id;
    public Employee()
    {

    }
    public Employee(String emp_name,int emp_id)
    {
        this.emp_name=emp_name; 
        this.emp_id=emp_id;
    }
    public Employee(String emp_name,String address,int salery,int emp_id)
    {
        this.emp_name=emp_name;
        this.address=address;
        this.salery=salery;
        this.emp_id=emp_id;
    }
    public String getEmp_name() {
        return emp_name;
    }
    public void setEmp_name(String emp_name) {
        this.emp_name = emp_name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public int getSalery() {
        return salery;
    }
    public void setSalery(int salery) {
        this.salery = salery;
    }
    public int getEmp_id() {
        return emp_id;
    }
    public void setEmp_id(int emp_id) {
        this.emp_id = emp_id;
    }

}

EmployeeDao.java:

package com.test.spring;

import org.springframework.jdbc.core.JdbcTemplate;

public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    public int saveEmployee(Employee e){  
    //String query="insert into employee (emp_name,address,salery,emp_id)values(?,?,?,?)";//not getting any exception
     String query="insert into employee (emp_name,address,salery,emp_id)values("+e.getEmp_name()+","+e.getAddress()+","+e.getSalery()+","+e.getEmp_id()+")";//getting queryTimeOutException
    return jdbcTemplate.update(query);
        }       

}

的applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  

<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />  
<property name="username" value="system" />  
<property name="password" value="mysql" />  
</bean>  

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

<bean id="edao" class="com.test.spring.EmployeeDao">  
<property name="jdbcTemplate" ref="jdbcTemplate"></property>  
</bean>  

</beans>  

Test.java:

package com.test.spring;

import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
public class Test {  

public static void main(String[] args) {  
    ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");  

    EmployeeDao dao=(EmployeeDao)ctx.getBean("edao");  
    int status=dao.saveEmployee(new Employee("Amit","Pingla",35000,102));  
    System.out.println(status);  

}  

}  

3 个答案:

答案 0 :(得分:1)

错误指出您错过了类路径中的类。这并不意味着在特定的调用期间会抛出特定的异常;但它根本找不到它的类。

要在类路径中添加QueryTimeoutException类,需要在spring-tx模块上添加依赖项。

答案 1 :(得分:1)

您可以添加此依赖项

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
</dependency>

如果你正在使用maven或者这个

[group: 'org.springframework', name: 'spring-tx', version: '4.1.6.RELEASE'],

如果您使用的是gradle。

答案 2 :(得分:0)

JdbcTemplate具有queryTimeout属性,您可以尝试将其配置为所需的值。