`

JdbcTemplate插入后获取自增ID

 
阅读更多
public int save(Model model) {
    logger.info("Start create a model:" + model.getName());
    Map<String, Object> parmMap = new HashMap<String, Object>();
    parmMap.put("name", model.getName());
    parmMap.put("group", model.getGroup());
    parmMap.put("type", model.getType());
    parmMap.put("category", model.getCategory());
    parmMap.put("description", model.getDescription());
    KeyHolder keyHolder = new GeneratedKeyHolder();
    SqlParameterSource source = new MapSqlParameterSource(parmMap);
    int rc = getJdbcTemplate().update(SQL_CREATE_MODEL, source ,keyHolder);
    System.out.println(keyHolder.getKey().intValue());
    if (rc > 0) {
        return keyHolder.getKey().intValue();
    } else {
        return 0;
    }
}
 
public int insertTable(LabelForm f) throws SQLException,ParseException
{
    String content = f.getSiteId();
    final String sql = "insert into TAG_INFO(SITE_ID,NAME,CONTENT) values(?,?,'"+content+"')";
    KeyHolder keyHolder = new GeneratedKeyHolder();
    getJdbcTemplate().update(
            new PreparedStatementCreator() {
                public PreparedStatement createPreparedStatement(Connection con) throws SQLException
                {
                    PreparedStatement ps = getJdbcTemplate().getDataSource()
                            .getConnection().prepareStatement(sql,new String[]{ "SITE_ID" ,"NAME"});
                    ps.setString(1, "站点号");
                    ps.setString(2, "我的名字");
                    return ps;
                }
            }, keyHolder);
    System.out.println("自动插入id============================" + keyHolder.getKey().intValue());
    return keyHolder.getKey().intValue();
}
 
分享到:
评论
1 楼 wyb243 2019-01-03  
大家千万不要按照这个写!!!
PreparedStatement ps = getJdbcTemplate().getDataSource() 
                            .getConnection().prepareStatement(sql,new String[]{ "SITE_ID" ,"NAME"}); 
这一行有严重bug,connection已经在方法中传递过来了,由框架管理,会自行关闭。但是getJdbcTemplate().getDataSource() 
                            .getConnection()这样拿出来的连接不会自己关闭,会占满连接池,导致应用挂掉。大家可以直接通过conn.prepareStatement来使用,框架会自行关闭conn。

相关推荐

Global site tag (gtag.js) - Google Analytics