【问题标题】:java.lang.NullPointerException in spring datasource春季数据源中的 java.lang.NullPointerException
【发布时间】:2014-08-03 22:00:06
【问题描述】:

我在 MySql 中完成了数据库表。我想要 spring application 和 database 之间的连接。 例如,我在编辑文本中插入值,它可以保存在数据库(MySql)中 但我得到了错误。我是春天的新手,请帮助。

以下是我的错误日志。

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) {}
        }
    }
}

【问题讨论】:

  • 您的JDBCStudentDAO 在第 65 行附近看起来如何?
  • 我有 StudentDAO 和 JDBCStudentDAO
  • @holmis83 我已经编辑了我的帖子和错误文件。
  • 据我统计,第 65 行是if (rs.next()) {。你能确认一下吗?
  • @AndersR.Bystrup 我知道,因此我要求确认线路。

标签: java mysql spring maven spring-mvc


【解决方案1】:

正如您在 cmets 中提到的,错误发生在 dataSource.getConnection() - 这意味着 dataSource 为空。您已注释掉自动装配该 bean,因此您可能忘记显式设置它:

/*@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 配置上的显式 &lt;property name="dataSource" ref="..." /&gt;

干杯,

【讨论】:

    【解决方案2】:

    如 cmets 中所述,DataSource 为空。原因是它没有被注入。要解决此问题,请执行以下操作:

    1) 确保 JDBCStudentDAO 由 spring 加载(applicationContext.xml 应该通过任何方式加载,通过显式加载 web.xml 中的上下文或声明来消亡)

    2) 确保在您的 applicationContext.xml 中初始化 DataSource 或删除 @Autowired 之前的注释

    当您启动您的应用程序时,您应该会看到指示您的数据源已绑定(到 applicationContext.xml 中配置的数据库)并且您的 DAO 和实体已加载的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2015-10-20
      相关资源
      最近更新 更多