我们在插入某一条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; }