1

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

以下是我做过的事情:

锦标赛DAO:

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。创建、读取和删除工作正常。在这里发布这个问题是我最后的选择,我已尽我所能。

4

2 回答 2

4

你有多余的

 ,

where在查询之前

date = ? , where id = ?";
于 2012-08-27T12:03:58.700 回答
0

您可以在您的TournamentDAO(或在其超类中,如果您想实现它有点通用)中getById(String id)再使用一种方法 name ,实现类似于

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它们将帮助您自动硬编码属性名称和所有内容。

有关基本示例,请参阅此链接

于 2012-08-27T12:22:43.643 回答