`

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。

相关推荐

    MYSQL开发性能研究之批量插入数据的优化方法

    为了解决这个问题,MySQL官方推荐使用批量插入,即将多条数据一次性插入,如`INSERT INTO TBL_TEST (id) VALUES (1), (2), (3)`。这种方式减少了网络传输的负担,同时减少了服务器的解析次数,从而提高了性能。 ...

    如果我只有一张注册表格,如何将数据插入2个表中

    这里,`LAST_INSERT_ID()`是MySQL的函数,用于获取上一次自增ID(假设`user_id`是自增主键),确保两个表之间的关联。 在Spring中,我们可以使用JdbcTemplate或NamedParameterJdbcTemplate来执行这些SQL语句。首先...

    SpringJDBC训练素材.zip

    对于插入操作,Spring JDBC提供了SimpleJdbcInsert类,它可以自动生成INSERT语句并处理主键自增的问题。对于存储过程的调用,SimpleJdbcCall则扮演了关键角色,它可以方便地包装和执行数据库的存储过程。 在实际...

    springj-dbc文档

    SimpleJdbcInsert主要用于简化插入操作,它可以自动生成INSERT语句并处理自增主键的返回值。例如: ```java SimpleJdbcInsert insert = new SimpleJdbcInsert(jdbcTemplate) .withTableName("Users") ....

    SpringBoot和mysql简单的Demo

    例如,使用`jdbcTemplate.queryForList()`获取数据,`jdbcTemplate.update()`进行插入、更新等操作。 - 如果使用JPA,可以使用`repository.save()`保存对象,`repository.findById()`查询等方法。 5. **创建...

Global site tag (gtag.js) - Google Analytics