我正在使用Java Spring和JDBC开发CRUD应用程序。我看过教程,但我坚持使用"U“letter of the 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的教程中获取了它,我不使用Hibernate,我也不知道如何创建一个!
有没有人能给我解释一下哪里出了问题,怎么写这些代码,这样我的更新才能正常工作。
PS。创建、读取和删除都运行得很好。在这里发布这个问题是我最后的选择,我已经做了我能做的。
发布于 2012-08-27 20:03:59
你有额外的
,查询中的where之前
date = ? , where id = ?";发布于 2012-08-27 20:22:44
你可以在你的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还提供了其他选项,如RowMaper和RowCallbackHandler,它们将帮助您自动硬编码属性名称等。
有关基本示例,请参阅this link。
https://stackoverflow.com/questions/12141616
复制相似问题