Java中last_insert_id的使用

last_insert_id的作用是:在当前表中的主键是自增时,插入一条新记录的同时使用last_insert_id可以获取当前的新记录的主键id。

下面是一个例子:

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

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring.xml","classpath:applicationContext.xml"})
public class TestSql {
    @Autowired(required = true) 
    private JdbcTemplate jdbcTemplate; 
    @Autowired(required = true) 
    private JdbcTemplate jdbcTemplate1; 
    
    @Test
    public void select(){
        final String sql = "insert into series(class_id,brand_id,series_name) values("+2+","+2+",'"+ "sfsfds')";
        System.out.println(sql);
        
        /*
        //这种方式会出现主键不确定性(当在另一张表同时插入一条数据并也要获取主键时会出现重复或者为0的情况)
        int ret = jdbcTemplate.update(sql);
        System.out.println("系列返回值==="+ret);
        String last = "select last_insert_id()";
        int lastId = jdbcTemplate.queryForInt(last);
        System.out.println("最新系列ID===="+lastId);
        */
        
        KeyHolder keyHolder = new GeneratedKeyHolder();  
        //这种方式是在上一种方式之上优化其不确定性(避免出现上述重复或者为0的情况)
        int i = jdbcTemplate.update(new PreparedStatementCreator() {  
            public PreparedStatement createPreparedStatement(Connection con) throws SQLException {  
                return con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
                //or return con.prepareStatement(sql, new String[]{"ID"});//ID是自动增长的自动  
            }  
        }, keyHolder);  
        System.out.println(i);
        System.out.println(keyHolder.getKeyList());
        
        final String sql1 = "insert into meta_type(series_id,type_name) values("+2+",'"+ "sfsfds')";
        System.out.println(sql1);
//        KeyHolder keyHolder1 = new GeneratedKeyHolder();  
        int j = jdbcTemplate1.update(new PreparedStatementCreator() {  
            public PreparedStatement createPreparedStatement(Connection con) throws SQLException {  
                return con.prepareStatement(sql1, PreparedStatement.RETURN_GENERATED_KEYS);  
                //or return con.prepareStatement(sql, new String[]{"ID"});//ID是自动增长的自动  
            }  
        }, keyHolder);  
        System.out.println("----"+j);  
        System.out.println(keyHolder.getKeyList());
    }
    
}

 

转载于:https://www.cnblogs.com/smart-hwt/p/8256864.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值