`

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。

相关推荐

    Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站.htm

    Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站

    spring自带的jdbcTemplate查询、插入预编译使用

    接下来,让我们看看如何使用`jdbcTemplate`进行预编译的插入操作。`update()`方法可以用来执行更新操作,同样支持预编译参数: ```java String sql = "INSERT INTO table (name, age) VALUES (?, ?)"; int rows...

    JdbcTemplate的批量方法使用

    在这个场景中,我们将详细探讨如何使用`JdbcTemplate`进行批量插入和删除操作。 批量插入操作在数据库处理大量数据时非常常见,它可以显著提高性能,因为数据库通常会优化批量处理,而不是单独处理每一项。在提供的...

    Spring的JDBCTemplate

    尽管`JDBCTemplate`非常适合用于查询操作,但它同样也支持执行更新、插入和删除等操作。需要注意的是,由于更新操作可能会干扰Hibernate的二级缓存,因此建议仅在必要时使用。 示例代码如下: ```java int rows...

    打印JdbcTemplate执行sql

    通过使用模板方法设计模式,`JdbcTemplate`提供了一系列静态和非静态的方法来执行各种SQL操作,如查询、更新、插入和删除。 为了打印`JdbcTemplate`执行的SQL语句,我们需要关注以下几点: 1. **日志配置**:首先...

    利用spring的jdbcTemplate处理blob、clob

    spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。

    JdbcTemplate实例

    `JdbcTemplate`是Spring框架中用于简化数据库操作的模板类,它提供了丰富的API来执行SQL语句,包括插入、更新、删除以及查询等操作。在Java应用中,使用`JdbcTemplate`可以避免直接操作JDBC,减少代码量,提高代码的...

    JdbcTemplate的事务控制.docx

    // id=1的主键冲突插入失败 String sql2 = "INSERT INTO user_tmp(`id`,`username`) VALUES(1,111)"; Connection conn = jdbcTemplate.getDataSource().getConnection(); LOG.info("1:{}", conn); boolean ac =...

    基于注解的Spring JdbcTemplate

    &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"&gt; ``` 其中,`dataSource`是指向数据库连接池的bean,如`Apache Commons DBCP`或`HikariCP`。 ### 4. 创建数据库访问层(DAO)...

    JdbcTemplate

    JdbcTemplate提供了一系列模板方法,用于执行SQL语句,包括查询、更新、插入和删除。例如,执行简单的SQL查询: ```java String sql = "SELECT * FROM users WHERE id = ?"; List&lt;User&gt; users = jdbcTemplate.query...

    springmvc JdbcTemplate demo

    JdbcTemplate支持多种操作,包括查询、更新、插入和删除等,且支持预编译的参数化SQL语句,有效防止SQL注入攻击。 以下是一个简单的SpringMVC结合JdbcTemplate的示例: 1. 配置SpringMVC:在`web.xml`中配置...

    SpringBoot操作多数据源(JPA+JdbcTemplate)

    本篇文章将探讨如何在Spring Boot中利用JPA(Java Persistence API)和JdbcTemplate来实现多数据源的管理,同时使用HikariCP作为高效的数据源连接池。 首先,让我们理解一下关键概念: 1. **Spring Boot**: 它是...

    JdbcTemplate操作总结

    JdbcTemplate支持多种类型的数据库操作,如查询、更新、插入和删除。例如,`queryForObject`用于返回单个对象,`queryForList`用于返回对象列表,`update`和`execute`用于执行修改操作。这些方法提供了参数化查询的...

    spring jdbcTemplate

    Spring JdbcTemplate是Spring JDBC模块的核心组件,它提供了一套模板方法,用于执行常见的JDBC操作,如查询、更新、插入和删除等。通过使用JdbcTemplate,开发者可以避免编写大量重复的JDBC模板代码,减少出错的可能...

    spring-jdbcTemplate实例工程

    1. **JdbcTemplate对象**:这是Spring JdbcTemplate的核心,它包含了执行SQL语句的所有方法,如update()用于更新,query()用于查询,insert()用于插入等。 2. **参数绑定**:JdbcTemplate支持多种方式的参数绑定,...

    JdbcTemplate查询

    &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"&gt; ``` 接着,在Java代码中可以通过注入的方式获取`JdbcTemplate`实例,并调用相应的查询方法。 #### 五、高级用法与注意事项 1. ...

    jdbcTemplate集锦很好的推荐

    - **应用场景**:适用于根据ID获取单个实体的情况,如用户登录验证、获取某个商品详情等。 ##### 2. 查询所有对象(find all) ```java public List&lt;Item&gt; findAll() { String sql = "SELECT * FROM items"; ...

    spring的jdbcTemplate小案例

    &lt;bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"&gt; ``` 或者使用Java配置: ```java @Configuration public class AppConfig { @Bean public DataSource dataSource() { ...

    jdbcTemplate相关jar包.zip

    2. 获取JdbcTemplate实例:通过Spring容器或者@Autowired注解,我们可以获取到JdbcTemplate实例,它需要一个DataSource作为依赖。 3. 编写SQL:你可以直接编写SQL语句,或者使用PreparedStatement,JdbcTemplate提供...

    SpringJdbcTemplate封装工具类

    例如,大量数据的批量插入可能更适合使用JdbcTemplate的`batchUpdate()`方法,或者直接使用JDBC的PreparedStatement来提高效率。 9. **最佳实践** - 保持SQL语句简洁,避免在业务代码中混杂复杂的SQL。 - 避免...

Global site tag (gtag.js) - Google Analytics