使用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代码如下:
public void insert() throws SQLException {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection(); //获取链接
String sql = "insert into people(name) values(?)"; //因为id为自动增长主键
st = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
st.setString(1, "Ding");
st.executeUpdate();
rs = st.getGeneratedKeys(); //获取自动增加主键
if(rs.next()) {
System.out.println(rs.getInt(1));
}
}finally{
JdbcUtils.release(conn, st, rs); //释放资源
}
}
当这个方法第一次执行时,由于是首次插入数据,因此在people表中的第一行数据项为id列主键自动生成为数值“1”,而我们通过JDBC的程序操作显示的也确实是这样:

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

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

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

这样通过每次执行插入语句,之后调用getGeneratedKeys()方法返回的结果集对象,就可以知道刚刚添加数据项的主键值,而这主键的值就可以给其他相关表来关联外键数据了。
使用JDBC获取能自动增加的主键的更多相关文章
- Java -- JDBC 获取数据库自动 生成的主键值
public class Demo4 { /* create table test1 ( id int primary key auto_increment, name varchar(20) ); ...
- JDBC 获取被插入数据的主键ID值
除了用存储过程还有以下方法可以获取: static int create() throws SQLException { Connection conn = null; Pre ...
- JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理
获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: /** * 获取数据 ...
- 【转】JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理
转自:http://www.cnblogs.com/ysw-go/ 获取数据库自动生成的主键 我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. ...
- 五.获得MYSQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- javaweb(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- 获取mysql自主生成的主键
一.sql语句 CREATE TABLE `testgeneratedkeys` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) ...
- JDBC 获取自动生成的主键
为什么需要获取自动生成的主键 例如:
随机推荐
- Centos6.5快速配置可用网卡
原文链接: Centos6.5快速配置可用网卡 安装完成后,我们启动我们的系统,此时我们的系统,是没有连网的,IP设备,并没有被激活,如果我们使用ifconfig命令查看IP地址,就会发现,此刻的地址 ...
- ASP.NET Core (一):简介
下一篇:ASP.NET Core(二):入门 英文原版:Introduction to ASP.NET Core 关于ASP.NET Core ASP.NET Core 是一个全新的开源.跨平台框架, ...
- oracle中if/else
oracle中if/else功能的实现的3种写法 1.标准sql规范 一.单个IF 1. if a=... then ......... end if; 2. if a=... then .... ...
- jsp获取一个对象和list对象
DiscHd ks = DiscHdService.getDiscHdByID(code); model.addAttribute("ks", ks); 如果传的是对象,则jsp页 ...
- Apache ab 使用说明
第一章 简介 ab是Apache超文本传输协议(HTTP)的性能测试工具.其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求. 第二章 说明 ab ...
- MySQL教程及经常使用命令1.1
在线教程 21分钟 MySQL 新手教程 w3school在线教程(MYSQL) 变量 查看系统变量 show global variables 查看详细变量 show global variable ...
- SQL语言类
SQL语分为四类:数据查询语言DQL,数据操纵语言DML. 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句.FROM子句,WHE ...
- Delphi发送邮件...
///首先在控件栏定位到:Indy Clients加入控件IdSMTP ///再定位到:Indy Misc加入控件IdMessage ///发送邮件函数 procedure TForm1.SendMa ...
- SQL SERVER 2008R2sp1配置Database Mail –用SQL 数据库发邮件
步骤1)创建配置文件和帐户 看图片吧,挺简单的: 中间略过的一些步骤,就点下一步即可. 下面我们测试一下: Step 2)配置邮件: 在完成账户和配置文件创建之后,我们需要配置Database Mai ...
- 网页制作之JavaScript部分 1 - 语法(复制教材内容)
一.简介 1.JavaScript它是个什么东西? 它是个脚本语言,需要有宿主文件,他的宿主文件是html文件. 2.它与Java有什么关系? 没有什么直接联系,java是Sun公司(已经没有了,被O ...