使用JDBC如何获取数据库自动生成的主键

 

使用JDBC如何获取数据库自动生成的主键

这部分内容用在哪里呢?例如,老公表和老婆表

老公表

id

name

 

 

 4

张三

 

 

 

 

老婆表

id

name

h_id

1

aaa

4

 

 

 

 

 

 

老公表中id是自动增长的,向老公表中插入一条记录,姓名为“张三”,id自动增长为4。这时向老婆表中插入一条记录,姓名为“aaa”,她老公为“张三”,这时我们就需要获取老公表中自动增长的id值去更新老婆表中的记录。

案例:

create database jdbc character set utf8 collate utf8_general_ci;

use jdbc;

create table users(

id int primary key auto_increment,

name varchar(40),

password varchar(40),

email varchar(60),

birthday date

)

现在向该表中插入一行记录,然后得到自动增长的id。

insert into users(name,password,email,birthday) values('zs','1234','zs@sina.com','1990-1-1');

insert into users(name,password,email,birthday) values('lisi','1234','lisi@sina.com','1990-3-1');

 

编写Java代码:Demo4.java

Connection conn = JdbcUtil.getConnection();

 

String sql = "insert into user(name,password,email,birthday)

                     values('abc','123','abc@sina.com','1978-08-08')";

 

PreparedStatement st = conn.

                     prepareStatement(sql,Statement.RETURN_GENERATED_KEYS );

//该Statement.RETURN_GENERATED_KEYS参数可带可不带,不带该参数时也可得到自动增长的id,因为MySQL的驱动默认就是可以返回自动增长的id的。如果得不到自动增长的id,你就要小心了,就需要传递该参数。该参数的取值还可以是Statement.NO_GENERATED_KEY,意思相反。但是当我们真的设置为NO_GENERATED_KEY时,还是可以返回自动增长的id,这时因为JDBC只是一种规范,mysql有没有按照规范去实现?从这里可以看出mysql根本没有安装规范去实现。

st.executeUpdate();

//上面的语句执行完,就向数据库的表中添加了一条记录,我们想获得刚添加的记录自动增长的id,方法:

ResultSet rs = st.getGeneratedKeys();  //得到插入行的主键,结果集中只有一条记录

if(rs.next())

       System.out.println(rs.getObject(1)); //rs.getInt(1)

 

注意:prepareStatement(sql,Statement.RETURN_GENERATED_KEYS );

此参数仅对insert操作有效。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值