zoukankan      html  css  js  c++  java
  • 使用JDBC获取能自动增加的主键

      本篇讲述如何使用JDBC获取能自动增加的主键的值。有时候我们在向数据库插入数据时希望能返回主键的值,而不是通过查询的方式。一般来说,在多表相互关联主键约束,也就是说别的表的外键约束是该表的主键,那么在该表插入时主键自动增加,那么就应该将主键值给别的外键是该表的主键,以指示别的表在更新自己的外键项时应该关联哪个值。

    前提:

      ① 这里探讨的首先只能是对数据库的插入操作(Insert)。

      ② 其次应该是表中的主键列,也就是在创建表的时候被赋予主键约束(PRIMARY KEY)的列数据项。

      ③ 其次该主键必须要有自动增加约束(AUTO_INCREMENT),满足这两样才能使用JDBC来获取自动增加的主键值。

     

      操作:在使用Statement对象或者PreparedStatement对象执行SQL语句后,调用getGeneratedKeys()方法,该方法返回的是结果集ResultSet对象。这个结果集对象包含自动生成的键。具体请看相关API文档:

      

      下面就以一个案例来简单地说明在每次对数据库插入一个新数据时,能获取被赋予自动增加约束的主键的值。

    例:

    创建数据库和表:

    create database jdbcdemo;
             
    use jdbcdemo;
    
    create table people(
         id int primary key auto_increment,
         name varchar(40)
    )

      我们以新建的people表为例,其中的id列设为主键约束(PRIMARY KEY),另外还有更重要的自动增加约束(AUTO_INCREMENT)。

     创建工程,在工程中导入数据库连接驱动的jar包。在【src】目录下新建一个database.properties文件,内容如下:

        driver=com.mysql.jdbc.Driver
        url=jdbc:mysql://localhost:3306/jdbcdemo
        username=root
        password=root

    构建JDBC的工具类,包括注册驱动,获取连接,释放资源和连接等,这部分同《JDBC操作数据库的学习(2)》中相同,此处略。

    向数据库中插入新数据并获取自动生成的主键demo代码如下:

     1 public void insert() throws SQLException {
     2         Connection conn = null;
     3         PreparedStatement st = null;
     4         ResultSet rs = null;
     5         try{
     6             conn = JdbcUtils.getConnection(); //获取链接
     7             String sql = "insert into people(name) values(?)";  //因为id为自动增长主键
     8             st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
     9             st.setString(1, "Ding");
    10             st.executeUpdate();
    11             
    12             rs = st.getGeneratedKeys(); //获取自动增加主键
    13             if(rs.next()) {
    14                 System.out.println(rs.getInt(1));
    15             }
    16         }finally{
    17             JdbcUtils.release(conn, st, rs);  //释放资源
    18         }
    19     }
    View Code

      当这个方法第一次执行时,由于是首次插入数据,因此在people表中的第一行数据项为id列主键自动生成为数值“1”,而我们通过JDBC的程序操作显示的也确实是这样:

      

    在数据库中查看添加的数据:

      

      当上面的方法再次执行时,众所周知数据库会将第二行数据项的主键id列自动加1,而我们通过结果集查看确实也是这样:

      

    在数据库中查看添加的数据:

      

      这样通过每次执行插入语句,之后调用getGeneratedKeys()方法返回的结果集对象,就可以知道刚刚添加数据项的主键值,而这主键的值就可以给其他相关表来关联外键数据了。

                            

  • 相关阅读:
    vue3 transition 动画变化与示例
    vue3中自定义指令和组件保持一致
    Vue3中使用vue-router跳转与传参
    Ext JS 二级弹框问题
    /usr/sbin/ntpd: error while loading shared libraries: libopts.so.25
    Spark Sql之pathGlobFilter 和recursiveFileLookup 选项关于分区的一点猜想和验证
    Hive之count函数的特别用法
    EasyTouch和NGUI的使用心得
    Unity 3D类结构简介
    Unity 3D入门简介
  • 原文地址:https://www.cnblogs.com/fjdingsd/p/5272903.html
Copyright © 2011-2022 走看看