http://lavasoft.blog.51cto.com/62575/238643

常常在使用Hibernate、iBatis时候,当插入一条数据的时候,实体Bean的原空主键就赋上新值了。
在JDBC中,也可以通过变相的手法来做到这点。下面是个测试的小例子。
 
一、环境
 
MySQL5.1
mysql-connector-java-5.1.10
jdk1.5
CREATE TABLE book( 
    code bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    kind varchar(45) NOT NULL, 
    name varchar(45) NOT NULL, 
    PRIMARY KEY(code, kind) 
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = latin1
二、获取自增主键
注意:使用String sql, int autoGeneratedKeys) 来定义PreparedStatement对象。并且指定:Statement.RETURN_GENERATED_KEYS 。
import lavasoft.common.DBToolkit;

import java.sql.*;

/** 
* JDBC获取新增记录的主键 

* @author leizhimin 2009-12-4 13:20:15 
*/ 
public class InsertKeyTest {

public static void main(String[] args) { 
                insertWithStaticSQL(); 
                insertWithParperedSQL(); 
        }

/** 
         * 预定义SQL模式,获取新增记录的主键 
         */ 
        public static void insertWithParperedSQL() { 
                Connection conn = null; 
                try { 
                        conn = DBToolkit.getConnection(); 
                        String sql = "insert into testdb.user (name, pswd) values(?,?)"; 
                        PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
                        pstmt.setString(1, "laozhang"); 
                        pstmt.setString(2, "111111"); 
                        pstmt.executeUpdate(); 
                        //检索由于执行此 Statement 对象而创建的所有自动生成的键 
                        ResultSet rs = pstmt.getGeneratedKeys(); 
                        if (rs.next()) { 
                                //知其仅有一列,故获取第一列 
                                Long id = rs.getLong(1); 
                                System.out.println("-----预定义SQL模式-----id = " + id); 
                        } 
                } catch (SQLException e) { 
                        e.printStackTrace(); 
                } finally { 
                        DBToolkit.closeConnection(conn); 
                } 
        }

/** 
         * 静态SQL模式,获取新增记录的主键 
         */ 
        public static void insertWithStaticSQL() { 
                Connection conn = null; 
                try { 
                        conn = DBToolkit.getConnection(); 
                        String sql = "insert into testdb.user (name, pswd) values('ttttt','121')"; 
                        PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
                        pstmt.executeUpdate(); 
                        //检索由于执行此 Statement 对象而创建的所有自动生成的键 
                        ResultSet rs = pstmt.getGeneratedKeys(); 
                        if (rs.next()) { 
                                //知其仅有一列,故获取第一列 
                                Long id = rs.getLong(1); 
                                System.out.println("-----静态SQL模式-----id = " + id); 
                        } 
                } catch (SQLException e) { 
                        e.printStackTrace(); 
                } finally { 
                        DBToolkit.closeConnection(conn); 
                } 
        } 
}

执行结果:
-----静态SQL模式-----id = 8 
-----预定义SQL模式-----id = 9

Process finished with exit code 0

JDBC获取新增记录的自增主键相关推荐

  1. MySQL导入csv文件内容到Table及数据库的自增主键设置

    写在前面 目的是测试将csv文件内容导入到表中, 同时记录一下自增主键的设置. 测试采用MySQL8.0. 新建表customer_info如下, 未设置主键. 修改上表, 添加主键id, 并设置为自 ...

  2. mysql linux导入csv主键,MySQL导入csv文件内容到Table及数据库的自增主键设置

    写在前面 目的是测试将csv文件内容导入到表中, 同时记录一下自增主键的设置. 测试采用MySQL8.0. 新建表customer_info如下, 未设置主键. 修改上表, 添加主键id, 并设置为自 ...

  3. 【Java】json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理)

    [Java]json与java对象转换,获得数据库自增主键,保存返回数据 (个人梳理) 模拟请求API 获得json数据,将json转换为java对象,再将java对象转换为list集合,再将list ...

  4. Java代码TkMyBatis通用Mapper中新增数据时同时获取自增主键ID,与适用uuid 做主键时获取 id

    一 . MyBatis mapper.xml文件中在xml 1.   加入 这句 :useGeneratedKeys="true" keyProperty="ID&quo ...

  5. MySQL获取自增主键Id

    mysql插入数据后返回自增ID的方法   mysql和oracle插入的时候有一个很大的区别是,oracle通过获取序列的方式得到主键,mysql本身有一个列可以做自增长字段,mysql在插入一条数 ...

  6. 新增一个主键自增长_为什么InnoDB宜用自增主键

    前言 领导:既然自增数字主键会导致主备同步时主键冲突,自增主键能不能砍掉? 答:自增主键主要是技术上提升效率,键冲突可以考虑备库插入时不指定主键值,或者binlog改成row模式,而且, 公司规范:如 ...

  7. MyBatis映射文件1(增删改、insert获取自增主键值)

    增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...

  8. mybatis3.1-[topic-16-17]-映射文件_增删改查_insert_获取自增主键的值

    笔记要点 出错分析与总结 /**测试第16章的增,删,改 的内容* 错误1: <insert id="addEmp" parameterType="com.bean ...

  9. java实现数据库主键的更新_Java获取数据库自增主键表中插入数据的ID

    这段代码是为了解决,JDBC中在给自增表插入数据后获取插入数据自动生成的ID问题.上网找了半天资料,原来在JDK中有提供方法哎. 参考资料点击打开链接感谢诸位高手的指点. 直接上代码吧: /** * ...

最新文章

  1. 小程序真的能帮商家挣到钱吗
  2. UI组件之TextView及其子类(五)计时器Chronometer
  3. Spring Session官方介绍及spring框架学习方法
  4. Geolocation :基于浏览器的定位服务
  5. FIR设置过采样率 matlab,Xilinx FIR IP的介绍与仿真
  6. java 最好 入门_C++和Java哪个比较好入门?初学者该如何选择?
  7. 一定质量的封闭气体被压缩后_多晶硅氯氢化装置补充氢隔膜压缩机十字头铜套磨损原因分析与改善探讨...
  8. python3 + selenium + (chrome and firefox)使用
  9. 营口理工学院计算机分数,营口理工学院历年分数线 2021营口理工学院录取分数线...
  10. 18 个惊人的 GitHub 仓库
  11. 基于HTML5功能强大的滑块幻灯片
  12. U盘量产大致研究思路
  13. 对话韩寒父子:“韩寒是我得意的笔名”
  14. 认识数据驱动,数据驱动是怎么使用的
  15. Java 存牌洗牌发牌看牌
  16. 一个关于随机矩阵谱范数的不等式
  17. 三角形(triangle)
  18. 解决计算机主机与打印机共享,教您解决打印机无法共享的方法
  19. JS判断对象是否为空对象的几种方法
  20. Activity的数据回传——案例:装备选择

热门文章

  1. 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态
  2. 编写你的第一个 Django 应用,第 1 部分
  3. 2014\Province_C_C++_B\6 奇怪的分式
  4. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1045:收集瓶盖赢大奖
  5. 【Java12】tomcatservlet(nginx,web.xml,生命周期,适配器优化),requestresponse(请求转发,登陆案例(1),重定向,文件下载)
  6. 【Linux】crontab命令详解
  7. 线性代数知识点总结_2020考研数学线性代数强化复习重点知识点总结
  8. linux libodbc.so.1,CentOS6.0虚拟机上安装nginx启动的错误---缺少libpcre.so.1共享库
  9. 神经网络—pytorch60min入门教程
  10. 颜色分类—leetcode75