插入数据并获取自增ID

方法一:SQL语句

INSERT INTO tableName (name) VALUES ('hahah');SELECT@@Identity;

方法二:SQL语句

select max(id) from tableName

方法三:SQL语句

SELECT LAST_INSERT_ID() 函数
注:LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update 操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。

方法二:JDBC

public static Connection getConn() {
        try {
            Class.forName(name);//指定连接类型
            conn = DriverManager.getConnection(url, user, password);//获取连接
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
 public static void main(String[] args) {
        try {
            conn = getConn();
            System.out.println(conn);
            String sql = "INSERT INTO fetch_id (name) VALUES ('hahah')";
            pst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
            pst.executeUpdate();
            res = pst.getGeneratedKeys();
            while (res.next()) {
                System.out.println(res.getLong(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                if (res != null) res.close();
                if (pst != null) pst.close();
                if (conn != null) conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容