zoukankan      html  css  js  c++  java
  • Spring中新建记录后返回自增主键的处理方法

    接手一个旧系统改造的过程,要插入后立即返回自增值,不能重构guid类型主键,Spring提供了很优美的机制。

    Spring利用GeneratedKeyHolder,提供了一个可以返回新增记录对应主键值的方法 :KeyHolder接口指代了一个通用的实现类GeneratedKeyHolder,该类返回新增记录时的自增长主键值

    代码:

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.Date;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.PreparedStatementCreator;
    import org.springframework.jdbc.support.GeneratedKeyHolder;
    import org.springframework.jdbc.support.KeyHolder;
    import javax.sql.DataSource;
    
    public class Main {
    
        public static void main(String[] args) {
    
            ApplicationContext context = new ClassPathXmlApplicationContext("TemporaryVenue-test.xml");
            DataSource dataSource = (DataSource)context.getBean("dataSource");
            JdbcTemplate  jdbcTemplate = new JdbcTemplate(dataSource);     
        
            String insert_sql = "insert into SYS_USERTV(username,password) values(?,?)";         
            
            //调用,获取插入后的自增值,其中"id"是自增字段名称
            System.out.println("方法调用获取当前自增int主键值" + insert(insert_sql,jdbcTemplate,"id"));
        
        }
    
        /**
         * 插入后返回自增主键值
         * @param jdbcTemplate
         * @return
         */
        private static Number insert(final String sql, 
                JdbcTemplate jdbcTemplate,
                final String keyName) {
           KeyHolder keyHolder = new GeneratedKeyHolder(); 
            int lines=jdbcTemplate.update(new PreparedStatementCreator() {
                
                @Override
                public PreparedStatement createPreparedStatement(Connection connection)
                        throws SQLException {
                    PreparedStatement ps = PreStatement(sql, connection,keyName);
                    return ps;
                }
            }, keyHolder);
                
                return keyHolder.getKey();
        }
        
        /**
         * 装载参数
         * @param sql
         * @param connection
         * @param keyName:自增字段名称
         * @return
         * @throws SQLException
         */
        private static PreparedStatement PreStatement(final String sql,
                Connection connection,String keyName) throws SQLException {
            PreparedStatement ps = connection.prepareStatement(sql,
                    new String[] { keyName });
            ps.setString(1, new Date().toString());
            ps.setString(2, "aa");
            return ps;
        }
    
    }
  • 相关阅读:
    雪中吟
    趋中法则
    我的年龄
    使用BindingList来实现DataGridview数据源为list时的动态增删改
    Winform下调用ShowDialog()显示窗体,切记调用Dispose来释放资源
    异常详细信息: System.Web.Hosting.HostingEnvironmentException: 访问 IIS 元数据库失败 解决方法
    【原创】:WinForm使用XML动态加载多语言
    ubuntu 11.10安装java1.6(转)
    java 中判断是否为 汉字(转)
    ubuntu下的c/c++环境搭建(转)
  • 原文地址:https://www.cnblogs.com/starcrm/p/6408919.html
Copyright © 2011-2022 走看看