有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法通过Spring 4查询数据库(HTTP 500请求处理失败)

要解决的问题:我正在构建一个Spring MVC应用程序,希望与我的数据库交互


方法:首先,我构建了一个简单的映射,调用该映射时,会将数据库中指定表中的项目数打印到控制台

我的代码如下:

@Controller
@RequestMapping("/databaseName")
public class DatabaseController {
    private JdbcTemplate jdbcTemplate;

    public void setDatabaseDataSource (DataSource dbDataSource) {
        this.jdbcTemplate = new JdbcTemplate(dbDataSource);
    }


    @RequestMapping(value = "/getSomeCountOfElementsInMyTable", method = RequestMethod.GET)
    public void getSomeTable() {
        System.out.println("SELECT count(*) FROM TEST_TABLE is now being executed...");
        int rowCount = this.jdbcTemplate.queryForObject("SELECT count(*) FROM TEST_TABLE", Integer.class);
        System.out.println(rowCount);
    }
}

豆子。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:beans="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">



    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <bean id="DatabaseController" class="com.company.project.controller.DatabaseController"/>



    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.database.jdbc.Driver"/>
        <property name="url" value="some_url_here"/>
        <property name="username" value="user"/>
        <property name="password" value="pw"/>
    </bean>

</beans>

基于方法面临的问题:我通过邮递员连接时收到以下错误:

HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException

type Exception report

message Request processing failed; nested exception is java.lang.NullPointerException

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause

java.lang.NullPointerException
    com.company.project.controller.DatabaseController.getSomeTable(DatabaseController.java:44)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:497)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:178)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 logs.

Apache Tomcat/7.0.52

其他相关信息:

  1. 我已经在一个单独的、简单的Java应用程序中测试了我的数据库连接,我能够获得成功的连接并返回正确的结果
  2. 我将数据库信息添加到mvc dispatcher servlet。xml和bean。我的WEB-INF文件夹中的xml文件
  3. 我没有使用Oracle数据库,我的目标是连接到Vertica数据库(我已经探索了使用Hibernate的可能性)

问题:如何解决HTTP状态500问题?这意味着rowCount不适合存储对象,但基于Spring's documentation,我认为这是正确的方法。我看了一些类似的问题(SO Question 1SO Question 2、和CodeRanch Question 3)。我确实看到了对DAO的引用,但也不理解为什么需要它,因为它与我对Spring文档的理解相冲突


共 (2) 个答案

  1. # 1 楼答案

    您必须将jdbcTemplate注入控制器

    @Autowired注释它,这样Spring就可以注入它

  2. # 2 楼答案

    您应该设置DatabaseController的数据源:

    <bean id="DatabaseController" class="com.company.project.controller.DatabaseController">
      <property name="databaseDataSource" ref="dataSource"/>
    </bean>
    

    或者只是给你的setter加上注释:

    @Autowired
    public void setDatabaseDataSource (DataSource dbDataSource) {
        this.jdbcTemplate = new JdbcTemplate(dbDataSource);
    }