2014-06-13 3 views
1

MySql에서 데이터베이스 테이블을 완료했습니다. 스프링 애플리케이션과 데이터베이스 사이의 연결이 필요합니다. 예를 들어, 편집 텍스트에 값을 삽입하고 있는데 데이터베이스 (MySql)에 저장할 수 있습니다 하지만 오류가 발생했습니다. 나는 봄에 새로 왔어. 도움이 필요해.스프링 데이터 소스의 java.lang.NullPointerException

다음은 내 오류 로그입니다.

16:05:44,784 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/SpringSample].[mvc-dispatcher]] (http-localhost/127.0.0.1:8080-1) Servlet.service() for servlet mvc-dispatcher threw exception: java.lang.NullPointerException 
at com.rxoffice.test.controller.JDBCStudentDAO.findByStudentId(JDBCStudentDAO.java:65) [classes:] 
at com.rxoffice.test.controller.Home.hi(Home.java:33) [classes:] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_32] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_32] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_32] 
at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_32] 
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) [spring-webmvc-3.0.5.RELEASE.jar:3.0.5.RELEASE] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.1.Final.jar:1.0.1.Final] 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.1.Final.jar:1.0.1.Final] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.17.Final.jar:] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.17.Final.jar:] 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.17.Final.jar:] 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.17.Final.jar:] 
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:165) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final] 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.17.Final.jar:] 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.17.Final.jar:] 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.17.Final.jar:] 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:372) [jbossweb-7.0.17.Final.jar:] 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.17.Final.jar:] 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:679) [jbossweb-7.0.17.Final.jar:] 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:931) [jbossweb-7.0.17.Final.jar:] 
at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_32] 

내 파일은 다음과 같습니다.

JDBCStudentDAO.java은 - 당신이 코멘트에 언급 된 바와 같이

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.sql.DataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.JdbcTemplate; 

    public class JDBCStudentDAO implements StudentDAO { 

/*@Autowired 
DataSource dataSource;*/ 
private DataSource dataSource; 
JdbcTemplate jdbcTemplate; 

public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 


@Override 
public void insert(Student student) { 
    // TODO Auto-generated method stub 

    String sql = "INSERT INTO student_info " + "(id , name) VALUES (?, ?)"; 
    Connection conn = null; 


    try { 
      conn = dataSource.getConnection(); 
      PreparedStatement ps = conn.prepareStatement(sql); 
      ps.setInt(1, student.getId()); 
      ps.setString(2, student.getName()); 
      ps.executeUpdate(); 
      ps.close(); 

    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }finally{ 

      if (conn != null) { 
       try { 
        conn.close(); 
       } catch (SQLException e) {} 
      } 
    } 


} 

@Override 
public Student findByStudentId(int stdId) { 
    // TODO Auto-generated method stub 

    String sql = "SELECT * FROM student_info WHERE id = ?"; 

    Connection conn = null; 

    try { 
     conn = dataSource.getConnection(); 
     PreparedStatement ps = conn.prepareStatement(sql); 
     ps.setInt(1, stdId); 
     Student student = null; 
     ResultSet rs = ps.executeQuery(); 
     if (rs.next()) { 
      student = new Student(
       rs.getInt("id"), 
       rs.getString("name") 
      ); 
     } 
     rs.close(); 
     ps.close(); 
     return student; 
    } catch (SQLException e) { 
     throw new RuntimeException(e); 
    } finally { 
     if (conn != null) { 
      try { 
      conn.close(); 
      } catch (SQLException e) {} 
     } 
    } 
} 
+0

'JDBCStudentDAO'는 65 행 쯤에 어떻게 생겼습니까? – holmis83

+0

나는 StudentDAO 및 JDBCStudentDAO가 있습니다 – Harshad07

+0

@ holmis83 내 게시물과 오류 파일을 편집했습니다. – Harshad07

답변

1

오류가 dataSource.getConnection()에서 발생 - dataSource가 null 인 것을 의미한다. 당신은 그 콩을 autowiring에 주석, 그래서 당신은 아마 명시 적으로 설정 잊는 것 :

/*@Autowired DataSource dataSource;*/ 
private DataSource dataSource; 

public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

문제에 더 많은 빛을 흘릴 수있는 당신의 applicationContext.xml 파일의 관련 부분을 - 당신이해야 할 수도 있습니다

<context:annotation-config/> 
<context:component-scan base-package="com.whatever.jdbc... , more.packages.to.scan,..."/> 

또는 JDBCStudentDao bean XML config의 명시적인 <property name="dataSource" ref="..." />.

건배,

0

설명에 언급 된대로 DataSource는 null입니다. 그 이유는 주입되지 않았기 때문입니다. ,

1) 확인 JDBCStudentDAO이 (applicationContext.xml은 어떤 방법으로로드해야 스프링에 의해로드되어 있는지 확인 명시 적으로 web.xml에 컨텍스트 또는 선언)

2로드하여 시들어 :이 문제를 해결하려면 다음을 수행) applicationContext.xml에서 DataSource가 초기화되었는지 또는 @Autowired 전에 주석을 제거했는지 확인하십시오.

응용 프로그램을 시작할 때 데이터 소스가 applicationContext.xml에 구성된 데이터베이스에 바인드되었음을 나타내는 메시지가 표시되어야합니다. DAO와 엔티티가로드되었는지 확인하십시오.

관련 문제