2016-02-26 80 views
2

需要解決的問題:我正在構建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 

其他相關信息:

  1. 我過我的數據庫連接在一個獨立的,簡單的Java應用程序,我能得到一個成功的連接,並返回正確的結果。
  2. 我將我的數據庫信息添加到我的WEB-INF文件夾中的mvc-dispatcher-servlet.xml和beans.xml文件中。
  3. 我沒有使用Oracle數據庫,我的目標是連接到Vertica數據庫(我已經探索過使用Hibernate的可能性)。

問題:如何解決HTTP狀態500的問題?這是說rowCount不適合存儲對象,但基於Spring's documentation,這是我理解的正確方法。我看了幾個類似的問題(SO Question 1SO Question 2CodeRanch Question 3)。我確實看到了DAO的引用,但不明白爲什麼它需要它,因爲它與我對Spring的文檔的理解相沖突。

+3

你有NPE,這有什麼好做的一個數據庫的配置或任何東西。請發佈「DatabaseController.getSomeTable」的代碼,但您可能沒有注入強制性依賴項。 –

+0

@JérémieB看起來像我在創建問題時拼錯了自己的函數調用。我確實注入了依賴關係,但是儘管配置它仍然遇到了麻煩。我也用我的beans.xml文件編輯了我的問題。 – abhi

+0

我沒有看到beans.xml –

回答

3

你應該設置你的DatabaseController的數據源:

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

或只標註您的二傳手:

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

謝謝,但是當我嘗試使用ref =「dataSource」時,它會導致編譯錯誤。情況怎麼會如此呢? – abhi

+0

這是什麼錯誤? –

+0

將鼠標懸停在上面時,它說「Bean必須是com.vertica.jdbc.DataSource類型的類型」(我試圖連接到Vertica數據庫,因此這可能會解釋某些內容)此外,當我切換類到com.vertica.jdbc.DataSource,我的屬性名稱突然被突出顯示,並說「無法解析屬性databaseDataSource,Spring XML模型驗證」 – abhi

1

您必須將jdbcTemplate注入您的控制器。

@Autowired註釋,以便Spring可以注入它。

+0

感謝您的回答!但是,當我用@Autowired註釋jdbcTemplate時,出現以下錯誤:org.springframework.beans.factory.BeanCreationException:創建名爲'databaseController'的bean時出錯:注入自動裝配依賴失敗;嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝入字段:private org.springframework.jdbc.core.JdbcTemplate com.bnymellon.ca.controller.databaseController.jdbcTemplate;嵌套異常是org.springframework.beans.factory.NoSuchBeanDefinitionException – abhi

+0

您的jdbcTemplate未配置。你必須配置它 – WeMakeSoftware

相關問題