博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 获取自增id的值的方法
阅读量:6673 次
发布时间:2019-06-25

本文共 3344 字,大约阅读时间需要 11 分钟。

原生jdbc方式:

Statement.getGeneratedKeys()

示例:

Statement stmt = null;ResultSet rs = null;try {    //    // Create a Statement instance that we can use for    // 'normal' result sets assuming you have a    // Connection 'conn' to a MySQL database already    // available    stmt = conn.createStatement();    //    // Issue the DDL queries for the table for this example    //    stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial");    stmt.executeUpdate(            "CREATE TABLE autoIncTutorial ("            + "priKey INT NOT NULL AUTO_INCREMENT, "            + "dataField VARCHAR(64), PRIMARY KEY (priKey))");    //    // Insert one row that will generate an AUTO INCREMENT    // key in the 'priKey' field    //    stmt.executeUpdate(            "INSERT INTO autoIncTutorial (dataField) "            + "values ('Can I Get the Auto Increment Field?')",            Statement.RETURN_GENERATED_KEYS);    //    // Example of using Statement.getGeneratedKeys()    // to retrieve the value of an auto-increment    // value    //    int autoIncKeyFromApi = -1;    rs = stmt.getGeneratedKeys();    if (rs.next()) {        autoIncKeyFromApi = rs.getInt(1);    } else {        // throw an exception from here    }    System.out.println("Key returned from getGeneratedKeys():"        + autoIncKeyFromApi);} finally {    if (rs != null) {        try {            rs.close();        } catch (SQLException ex) {            // ignore        }    }    if (stmt != null) {        try {            stmt.close();        } catch (SQLException ex) {            // ignore        }    }}

也有使用SELECT LAST_INSERT_ID() 注意:并发可能会出现问题。示例:

Statement stmt = null;ResultSet rs = null;try {    //    // Create a Statement instance that we can use for    // 'normal' result sets.    stmt = conn.createStatement();    //    // Issue the DDL queries for the table for this example    //    stmt.executeUpdate("DROP TABLE IF EXISTS autoIncTutorial");    stmt.executeUpdate(            "CREATE TABLE autoIncTutorial ("            + "priKey INT NOT NULL AUTO_INCREMENT, "            + "dataField VARCHAR(64), PRIMARY KEY (priKey))");    //    // Insert one row that will generate an AUTO INCREMENT    // key in the 'priKey' field    //    stmt.executeUpdate(            "INSERT INTO autoIncTutorial (dataField) "            + "values ('Can I Get the Auto Increment Field?')");    //    // Use the MySQL LAST_INSERT_ID()    // function to do the same thing as getGeneratedKeys()    //    int autoIncKeyFromFunc = -1;    rs = stmt.executeQuery("SELECT LAST_INSERT_ID()");    if (rs.next()) {        autoIncKeyFromFunc = rs.getInt(1);    } else {        // throw an exception from here    }    System.out.println("Key returned from " +                       "'SELECT LAST_INSERT_ID()': " +                       autoIncKeyFromFunc);} finally {    if (rs != null) {        try {            rs.close();        } catch (SQLException ex) {            // ignore        }    }    if (stmt != null) {        try {            stmt.close();        } catch (SQLException ex) {            // ignore        }    }}

 

mybatis封装后的配置如下:

调用

postDao.add(post); 和以前一样结果后返回1,使用post.getId()可以获取到自增的id。

参考文献:

【1】http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-last-insert-id.html

【2】http://stackoverflow.com/questions/12241260/get-auto-genearated-key-for-the-inserted-record-in-mybatis

转载地址:http://hdgxo.baihongyu.com/

你可能感兴趣的文章
linux降级重新安装gcc
查看>>
pythonweb服务器编程(三)
查看>>
属性(@property)、@synthesize
查看>>
maven学习(2)-在Eclipse 中使用Maven
查看>>
golang在gitlab中的工作流
查看>>
bash脚本编程
查看>>
Bzoj3626 [LNOI2014]LCA
查看>>
DataTable.Select()中的表达式可使用的函数
查看>>
iOS网络编程之同步、异步、请求队列 2014-12-7
查看>>
链表的应用~~~~~~一元多项式的相加——原创
查看>>
阿花宝宝 Java基础笔记 之 多态
查看>>
HTML5学习之路——HTML 5 Web 存储
查看>>
enum和int、string的转换操作
查看>>
C# ACCESS数据库操作类
查看>>
详解vue通过NGINX部署在子目录或者二级目录实践
查看>>
括号匹配算法思想
查看>>
HDU 1043 Eight 【经典八数码输出路径/BFS/A*/康托展开】
查看>>
589. N叉树的前序遍历
查看>>
Java线程池使用和常用参数(待续)
查看>>
java 中 get post
查看>>