需要解決的問題:我正在構建Spring MVC應用程序並希望與我的數據庫進行交互。無法通過Spring 4查詢數據庫(HTTP 500請求處理失敗)
方法:首先,我建立了一個簡單的映射,要求時,打印出我的數據庫到控制檯中指定的表中的項目數。
我的代碼如下:
@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);
}
}
beans.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
其他相關信息:
- 我過我的數據庫連接在一個獨立的,簡單的Java應用程序,我能得到一個成功的連接,並返回正確的結果。
- 我將我的數據庫信息添加到我的WEB-INF文件夾中的mvc-dispatcher-servlet.xml和beans.xml文件中。
- 我沒有使用Oracle數據庫,我的目標是連接到Vertica數據庫(我已經探索過使用Hibernate的可能性)。
問題:如何解決HTTP狀態500的問題?這是說rowCount不適合存儲對象,但基於Spring's documentation,這是我理解的正確方法。我看了幾個類似的問題(SO Question 1,SO Question 2和CodeRanch Question 3)。我確實看到了DAO的引用,但不明白爲什麼它需要它,因爲它與我對Spring的文檔的理解相沖突。
你有NPE,這有什麼好做的一個數據庫的配置或任何東西。請發佈「DatabaseController.getSomeTable」的代碼,但您可能沒有注入強制性依賴項。 –
@JérémieB看起來像我在創建問題時拼錯了自己的函數調用。我確實注入了依賴關係,但是儘管配置它仍然遇到了麻煩。我也用我的beans.xml文件編輯了我的問題。 – abhi
我沒有看到beans.xml –