2012-08-27 47 views
1

我正在研究使用Java Spring和JDBC的CRUD應用程序。我看過教程,但我卡住了「U」字母:)。 我做了一些事情,但如果你能幫助我,我將不勝感激。java CRUD應用程序卡在「更新」上!

這裏有事情,我做:

TournamentDAO:

public void edit(Tournament tournament){ 
    String sql = "update TOURNAMENT.TOURNAMENT set name = ? , location = ? , date = ? , where id = ?"; 

    m_jdbcTemplate.update(sql, 
       new Object[]{ 
       tournament.getName(), 
       tournament.getLocation(), 
       tournament.getDate(), 
       Long.toString(tournament.getId()) 
    }); 
} 

控制器 「EditTournament」:

@Controller 
public class EditTournament { 

    @Autowired 
    private TournamentService turnirSer; 

    @RequestMapping(value = "/editTournament", method = RequestMethod.GET) 
    public ModelAndView edit(@RequestParam("id") Integer id) { 
     ModelAndView mav = new ModelAndView("editTournament"); 
     Tournament Tournament = turnirSer.getById(id); 
     mav.addObject("editTournament", tournament); 
     return mav; 
    } 

    @RequestMapping(value = "/editTournament", method = RequestMethod.POST) 
    public String update(Model model, @Valid Tournament tournament, 
      BindingResult bindingResult, 
      @ModelAttribute("tournamentList") ArrayList<Tournament> TournamentList) { 
     if (!bindingResult.hasErrors()) { 
      turnirSer.editTournament(tournament); 
      tournamentList.add(tournament);   
     } 
     return "editTournament"; 
    } 

} 

現在只是說我也知道這是完全是一個爛攤子這爲什麼我需要你的幫助!

在這一行:

Tournament Tournament = turnirSer.getById(id); 

我沒辦法getById(id),我把它形成基於Hibernate的,我不使用教程,我不知道如何創建一個!

有人可以請解釋我什麼是錯的,以及如何編寫此代碼,以便我的更新工作。

PS。創建,讀取和刪除工作正常。在這裏發佈這個問題是我的最後一個選擇,我已經做了我能做的。

+0

最好是顯示異常的堆棧跟蹤。 – MJM

回答

4

你有多餘的

, 

查詢where

date = ? , where id = ?"; 
0

您可以在TournamentDAO(或它的超類,如果你想實現它咬了通用)與又多了一個方法名稱getById(String id),執行情況類似於

public Tournament getById(String id){ 
    String sql = "select name, location, date from TOURNAMENT.TOURNAMENT where id = :id"; 
    List<Map<String, String>> results = m_jdbcTemplate.queryForList(sql, new HashMap<String, String>(){{put("id", id)}}); 
    //as id would be the primary key, at max you may one record (one entry in the list). 
    Map<String, Object> result = results.get(0); //add a check for no results 
     Tournament t = new Tournament(); 
     t.setName(result.get("name")); 
     //set all your properties as mentioned above 
    return t; 
    } 

jdbctemplate還提供其他選項,如RowMaperRowCallbackHandler,這將幫助您自動化硬編碼屬性名稱和所有屬性。

有關基本示例,請參閱this link