掠过的岁月

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

我们在插入某一条sql信息的同时,如果还需要获取对应的主键ID,就可以使用getGeneratedKeys()来获取主键ID

代码如下:这里是明确知道只插入一条的情况

public long insert(String sql, Object... args) {
    long id=0;
    Connection connection=null;
    PreparedStatement preparedStatement=null;
    ResultSet resultSet=null;
    try {
        connection=JDBCUtils.getConnection();
        preparedStatement=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
        if(args!=null){
            for(int i=0;i<args.length;i++){
                preparedStatement.setObject(i+1, args[i]);
            }
        }
        preparedStatement.executeUpdate();
        //获取生产的主键值
        resultSet=preparedStatement.getGeneratedKeys();//获取主键值
        
        if(resultSet.next()){
            id=resultSet.getLong(1);// getLong(1)是指获取第一列的值(一般第一列都为主键id)   所以id=它
        }
        System.out.println("产生的id"+id);
    } catch (Exception e) {
        // TODO: handle exception
    }finally{
        JDBCUtils.release(resultSet, preparedStatement);
        JDBCUtils.release(connection);
    }
        return id;
    }

如果是批量插入,就要用while循环,if条件就不能实现批量插入,因为要获取多条数据对象对应的主键ID,所以用while得以实现,resultSet是一个数据集   .next获取它的下一个指针(可以理解成下一行数据) 

代码如下

public long insert(String sql, Object... args) {
    long id=0;
    Connection connection=null;
    PreparedStatement preparedStatement=null;
    ResultSet resultSet=null;
    try {
        connection=JDBCUtils.getConnection();
        preparedStatement=connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
        if(args!=null){
            for(int i=0;i<args.length;i++){
                preparedStatement.setObject(i+1, args[i]);
            }
        }
        preparedStatement.executeUpdate();
        //获取生产的主键值
        resultSet=preparedStatement.getGeneratedKeys();//获取主键值
        
        while(resultSet.next()){
            id=resultSet.getLong(1);// getLong(1)是指获取第一列的值(一般第一列都为主键id)   所以id=它
        }
        System.out.println("产生的id"+id);
    } catch (Exception e) {
        // TODO: handle exception
    }finally{
        JDBCUtils.release(resultSet, preparedStatement);
        JDBCUtils.release(connection);
    }
        return id;
    }

 

posted on 2018-06-28 10:25  掠过的岁月  阅读(1475)  评论(0编辑  收藏  举报