1. 数据表设计时,一般都会有一个主键(Key)(自己指定),有时也可以使用联合主键;
  2. 有许多数据库提供了隐藏列为表中的每行记录分配一个唯一键值(如:rowid);
  3. 当我们没有指定哪一列作为主键key时,数据表可能会含有一个隐含的主键(或者叫唯一键值);
当我们向数据表中插入数据时,对于每一条记录,都会有一个主键与之对应,那么我们如何在向数据表中插入数据时,获取到数据库自动分配的主键呢?

如下给出示例:


上面使用到了PreparedStatement来执行SQL插入,关于PreparedStatement与Statement的用法与区别,可以参考文章:
这里不多介绍;
只需要大体知道一些:
  1. PreparedStatement可以写参数化查询,比Statement能获得更好的性能;
  2. 对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,这种预处理语句查询比普通的查询运行速度更快。
  3. PreparedStatement可以防止SQL注入式攻击;
  4. PreparedStatement可以写动态查询语句;
  5. PreparedStatement与java.sql.Connection对象是关联的,一旦你关闭了connection,PreparedStatement也没法使用了。
  6. PreparedStatement查询默认返回FORWARD_ONLY的ResultSet,你只能往一个方向移动结果集的游标。当然你还可以设定为其他类型的值如:”CONCUR_READ_ONLY”。
  7. 占位符的索引位置从1开始而不是0,如果填入0会导致*java.sql.SQLException invalid column index*异常。所以如果PreparedStatement有两个占位符,那么第一个参数的索引时1,第二个参数的索引是2.

KeyHolder是一个接口,下面是它的代码:

GeneratedKeyHolder是KeyHolder接口的默认实现类,他的函数作用如下:
当执行insert语句时,会自动将数据库自动产生的key值保存在GeneratedKeyHolder对象对象中,如下是jdbcTemplete.update()的源码:








附件列表

【JDBC】向数据表插入数据时,自动获取生成的主键的更多相关文章

  1. mybatis插入操作时,返回自增主键id

    mapper.xml 代码 <insert id="insert" parameterType="com.Student" > <select ...

  2. phpstudy命令行中数据表插入中文显示不了的问题

    在PHPstudy环境下,做MySQL操作,往数据表里面插入数据的时候,如果是中文的数据就会显示不了或者是问号?. 这个问题搞了我一晚上了,终于知道问题所在. 下载的PHPstudy的MySQL数据库 ...

  3. MyBatis插入时候获取自增主键方法

    方法一:(Oralce不支持这种写法) useGeneratedkeys 默认值为 false,含义:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty ...

  4. 如何往有自增标识字段的表插入数据时,同时给自增标识字段插入值呢,在Inset Into语句前后加上SQL语句:SET IDENTITY_INSERT TableName ON和SET IDENTITY_INSERT TableName OFF

    当要往有设置自增标识字段的表插入数据,并希望同时设置好自增字段的值时,可以在insert into 的SQL语句前后分别加上一句sql语句,SET IDENTITY_INSERT TableName  ...

  5. 向oracle中的表插入数据的方法

    向oracle中的表插入数据的方法有以下几种: 假设表名为User 第一种方法:select t.*,rowid from User t;-->点击钥匙那个标记就可向表中添加数据 第二种方法:s ...

  6. SQL-Oracle存储过程-循环A表,向B表插入数据

    --存储过程,查询A表,向B表插入数据 create or replace procedure prc_sg_sjtj_config(p_flag out varchar2) IS BEGIN FOR ...

  7. sql实现同时向主表和子表插入数据方法

    使用sql语句实现同时向主表和子表插入数据方法: Oracle: -- oracle创建sequence create sequence SEQ_test minvalue 1 maxvalue 99 ...

  8. MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作(转)

    MySQL有很多的可视化管理工具,比如“mysql-workbench”和“sequel-pro-”. 现在我写MySQL的终端命令操作的文章,是想强化一下自己对于MySQL的理解,总会比使用图形化的 ...

  9. 数据库之mysql篇(3)—— mysql创建/修改数据表/操作表数据

    创建数据表:create table 数据表名 1.创建表规范 create table 表名( 列名   数据类型    是否为空   自动排序/默认值  主键/外键/唯一键, 列名   数据类型 ...

随机推荐

  1. hdu 5093 Battle ships

    二分图匹配 #include<cstdio> #include<cstring> #include<iostream> #include<cmath> ...

  2. DPM(Deformable Parts Model)--原理(一)(转载)

    DPM(Deformable Parts Model) Reference: Object detection with discriminatively trained partbased mode ...

  3. activiti 中的签收与委托 操作

    原文:http://my.oschina.net/acitiviti/blog/350957 先看看activiti中关于TASK的数据库表: 其中有两个字段:OWNER_,ASSIGNEE_ 这两个 ...

  4. leetcode 38 Count and Say ---java

    这道题主要就是求一个序列,题目得意思就是 1 --> 11 --> 21 --> 1211 -->   111221 --> 312211 --> ..... 1个 ...

  5. Android——BaseAdapter相关

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  6. GDB动态库搜索路径

    当GDB无法显示so动态库的信息或者显示信息有误时,通常是由于库搜索路径错误导致的,可使用set sysroot.set solib-absolute-prefix.set solib-search- ...

  7. Agent admitted failure to sign using the key

    SSH生成id_rsa, id_rsa.pub后,连接服务器却报: Agent admitted failure to sign using the key 错误. 解决方法: 在当前用户下执行命令: ...

  8. 在Windows7上安装coreseek3.2同时在PHP下简单实现步骤

    这两天安装了coreseek+sphinx服务,前面装的是比较低版本的,再试了一下官网比较稳定一个版本1.首先下载:因为包有点大,就不在这里增加链接了,需要可以到官网下载 coreseek-3.2.1 ...

  9. Linux 用户态和内核态

    1.特权级特权级用来管理和控制程序执行.如Intel x86架构的CPU,有0~3四个特权级,0级最高,3级最低.硬件在执行每条指令时都会检查指令具有的特权级.硬件提供了特权级使用机制,对操作系统来说 ...

  10. Linux 数据流重定向

    1.三种数据流重定向1)标准输入(stdin):代码为0,使用0<或0<<,其中代码0可以省略2)标准输出(stdout):代码为1,使用1>或1>>,其中代码1可 ...