首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java CRUD应用程序卡在“更新”!

java CRUD应用程序卡在“更新”!
EN

Stack Overflow用户
提问于 2012-08-27 20:02:25
回答 2查看 332关注 0票数 1

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

以下是我做过的事情:

TournamentDAO:

代码语言:javascript
复制
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":

代码语言:javascript
复制
@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";
    }

}

现在我只想说我知道这完全是一团糟这就是为什么我需要你的帮助!

在这一行中:

代码语言:javascript
复制
Tournament Tournament = turnirSer.getById(id);

我没有getById(id)方法,我从基于Hibernate的教程中获取了它,我不使用Hibernate,我也不知道如何创建一个!

有没有人能给我解释一下哪里出了问题,怎么写这些代码,这样我的更新才能正常工作。

PS。创建、读取和删除都运行得很好。在这里发布这个问题是我最后的选择,我已经做了我能做的。

EN

回答 2

Stack Overflow用户

发布于 2012-08-27 20:03:59

你有额外的

代码语言:javascript
复制
 ,

查询中的where之前

代码语言:javascript
复制
date = ? , where id = ?";
票数 4
EN

Stack Overflow用户

发布于 2012-08-27 20:22:44

你可以在你的TournamentDAO (或者在它的超类中,如果你想实现一个有点泛型的方法)中再增加一个名为getById(String id)的方法,这个实现类似于

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12141616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档