2017-03-31 26 views
0

我試圖從數據庫檢索數據並在UI上顯示它。 FriendJDBCTemplate類中存在空指針異常。任何人都可以幫助我這個。JDBCTemplate類中的listFriends方法中的JDBCTemplateObject.query()中的空指針異常

FriendJDBCTemplate.java:

package com.initial.hellocontroller; 
import java.util.List; 
import javax.sql.DataSource; 
import org.springframework.jdbc.core.JdbcTemplate; 

public class FriendJDBCTemplate implements StudentDAO { 
    private DataSource dataSource; 
    private JdbcTemplate jdbcTemplateObject; 

    public void setDataSource(DataSource dataSource) { 
     this.dataSource = dataSource; 
     JdbcTemplate jdbcTemplateObject = new JdbcTemplate(dataSource); 
    } 
    public void create(String name, String Email) { 
     String SQL = "insert into Friend (name, Email) values (?, ?)"; 
     jdbcTemplateObject.update(SQL, name, Email); 
     System.out.println("Created Record Name = " + name + " Email = " + Email); 
     return; 
    } 
    public Friend getFriend(String Telephone) { 
     String SQL = "select * from Friend where Telephone = ?"; 
     Friend friend = jdbcTemplateObject.queryForObject(SQL, new Object[] {Telephone}, new FriendMapper()); 
     return friend; 
    } 
    public List<Friend> listFriends() { 
     String SQL = "select * from Friend"; 
     List <Friend> friends = jdbcTemplateObject.query(SQL, new FriendMapper()); 
     return friends; 
    } 
    public void delete(String Telephone) { 
     String SQL = "delete from Friend where Telephone = ?"; 
     jdbcTemplateObject.update(SQL, Telephone); 
     System.out.println("Deleted Record with ID = " + Telephone); 
     return; 
    } 
    public void update(String Telephone, String name){ 
     String SQL = "update Friend set name = ? where Telephone = ?"; 
     jdbcTemplateObject.update(SQL, name, Telephone); 
     System.out.println("Updated Record with Telephone = " + Telephone); 
     return; 
    } 
} 

FriendMapper.java

package com.initial.hellocontroller; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import org.springframework.jdbc.core.RowMapper; 

public class FriendMapper implements RowMapper<Friend> { 
    public Friend mapRow(ResultSet rs, int rowNum) throws SQLException{ 
     Friend friend = new Friend(); 
     friend.settelephone(rs.getString("Telephone")); 
     friend.setname(rs.getString("name")); 
     friend.setemail(rs.getString("Email")); 
     return friend; 
    } 
} 

Friend.java

package com.initial.hellocontroller; 
import java.util.List; 

public class Friend implements Listall { 
    private String name; 
    private String Email; 
    private String Telephone; 

    public void setname(String name){ 
     this.name= name; 
    } 
    public String getname(){ 
     return name; 
    } 

    public void setemail(String Email){ 
     this.Email = Email; 
    } 
    public String getemail(){ 
     return Email; 
    } 
    public void settelephone(String Telephone){ 
     this.Telephone = Telephone; 
    } 
    public String gettelephone(){ 
     return Telephone; 
    } 

    public List<Friend> Listallfriends(){ 
     FriendJDBCTemplate listall = new FriendJDBCTemplate(); 
     return listall.listFriends(); 
    } 
} 

HelloController.java

package com.initial.hellocontroller; 
import java.util.Map; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.servlet.ModelAndView; 

import javax.servlet.http.HttpServletResponse; 
import org.springframework.*; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.servlet.mvc.AbstractController; 
import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.bind.annotation.*; 

import java.util.ArrayList; 
import java.util.List; 
/* 
public class HelloController extends AbstractController 
{ 

    @override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception 
    { 
     ModelAndView modelandview = new ModelAndView("Hellopage"); 
     modelandview.addObject("welcomeMessage","Hi User, Welcome to the first spring MVC tutorial"); 

     return modelandview; 
    } 
} 

*/ 

@Controller 
public class HelloController { 

    List<Friend> templist = new ArrayList<Friend>(); 
    Friend temp = new Friend(); 
    @RequestMapping(value = "/admissionForm",method = RequestMethod.GET) 
    public ModelAndView getAdmissionForm(){ 
     ModelAndView model = new ModelAndView("Portfolio"); 
     return model; 
    } 

    @RequestMapping(value="/submitAdmissionForm", method = RequestMethod.POST) 
    public ModelAndView submitAdmissionForm(@RequestParam Map<String,String> reqPar){ 
     String name = reqPar.get("name"); 
     String email =reqPar.get("Email"); 
     String telephone =reqPar.get("Telephone"); 

     // taking the input from the form to update the data from database. 
     Friend friend = new Friend(); 
     friend.setname(name); 
     friend.setemail(email); 
     friend.settelephone(telephone); 

     ModelAndView model = new ModelAndView("HelloPage"); 
     templist = temp.Listallfriends(); 
     for (Friend items : templist){ 
      model.addObject("msg", "your total friends" +items); 
     } 
     return model; 
    } 
} 

調度-servlet.xml中

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="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/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 


    <context:component-scan base-package="com.initial.hellocontroller"/> 
    <mvc:annotation-driven/> 

    <bean id="viewResolver" 
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 

    <bean id="dataSource" 
      class = "org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name = "driverClassName" value = "oracle.jdbc.OracleDriver"/> 
     <property name = "url" value = "jdbc:oracle:thin:@localhost:1521:ORCL"/> 
     <property name = "username" value = "system"/> 
     <property name = "password" value = "hello123"/> 
    </bean> 
</beans> 

錯誤跟蹤:

java.lang.NullPointerException 
    com.initial.hellocontroller.FriendJDBCTemplate.listFriends(FriendJDBCTemplate.java:28) 
    com.initial.hellocontroller.Friend.Listallfriends(Friend.java:37) 
    com.initial.hellocontroller.HelloController.submitAdmissionForm(HelloController.java:63) 
    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:498) 
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

回答

0

你有兩個jdbcTemplateObject具有相同的名稱。它如何編譯。

變化JdbcTemplate jdbcTemplateObject = new JdbcTemplate(dataSource);

this.jdbcTemplateObject = new JdbcTemplate(dataSource);中的setDataSource。

你在你的spring配置文件中定義了你的dataSource bean,但是你並沒有將它注入到任何地方的FriendsJDBCTemplate。您需要使用註釋「@Autowired」或手動在spring xml中連線bean。只聲明bean將不起作用。你必須告訴Spring容器他們應該注入的地方。

@Autowired 
private DataSource dataSource; 
+0

這樣做後,出現同樣的錯誤「空指針異常」。 – Wheel60

+0

你可以在哪裏將你的'dataSource'注入到FriendJDBCTemplate中嗎? – yogidilip

+0

我已經更新了問題中的disptacher-servlet。 – Wheel60