扩展String JdbcTemplate获得插入数据的主键

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

String自带的获得主键方法比较繁琐,所以自己写了一个方法来和大家分享

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterDisposer;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

/**
 * 数据存取适配器
 * @author David Day
 */
public class JdbcTemplateAdapter extends JdbcTemplate {

    public JdbcTemplateAdapter() {
        super();
    }

    public JdbcTemplateAdapter(DataSource ds) {
        super(ds);
    }

    /**
     * 增加并且获取主键
     * @param sql sql语句
     * @param params 参数列表
     * @return 主键
     */
    public Object insertAndGetKey(final String sql, final Object... params) {
        logger.debug("Executing SQL update and returning generated keys");

        final KeyHolder key = new GeneratedKeyHolder();

        update(new PreparedStatementCreator() {

            public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
                PreparedStatement ps = con.prepareStatement(sql, 
                        PreparedStatement.RETURN_GENERATED_KEYS);
                PreparedStatementSetter pss = newArgPreparedStatementSetter(params);
                try {
                    if (pss != null) {
                        pss.setValues(ps);
                    }
                } finally {
                    if (pss instanceof ParameterDisposer) {
                        ((ParameterDisposer) pss).cleanupParameters();
                    }
                }
                return ps;
            }

        }, key);

        return key.getKey();
    }

}

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇: Android之TextView实现文字过长时省略部分或者滚动显示

下一篇:Java判断一段话中是否有电话号码