java CRUD应用程序停留在“更新”!

时间:2012-08-27 12:02:25

标签: java database spring crud

我正在使用Java Spring和JDBC处理CRUD应用程序。我看过教程,但我坚持使用crUd的“U”字母:)。 我做过一些事情,但如果你能帮助我,我将不胜感激。

以下是我所做的事情:

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())
    });
}

Controller“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";
    }

}

现在只是说我知道这完全是一个MESS,这就是我需要你帮助的原因!

在这一行:

Tournament Tournament = turnirSer.getById(id);

我没有方法getById(id),我把它作为基于Hibernate的教程,我不使用,我不知道如何创建一个!

有人可以解释一下我的错误以及如何编写此代码以便我的更新有效。

PS。创建,读取和删除工作正常。在这里发布这个问题是我的最后一个选择,我已尽我所能。

2 个答案:

答案 0 :(得分:4)

你有额外的

 ,

在查询中的where之前

date = ? , where id = ?";

答案 1 :(得分: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获取基本示例。