获取当前插入数据库的主键值

在项目开发过程中,经常会遇到要由数据库返回编号给用户的情况。如用户访问时,判断该用户是否为没有编号的用户,如果没有,则需要插入用户表一第记录,并将用户编号返回给客户端。

基于这种情况,就需要用到getGeneratedKeys()方法了。

下面是我写的一个测试类:

package com.snowfish;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SequenceTest {

	private static String dbURL = "jdbc:postgresql://127.0.0.1:5433/test";
	private static String userName = "postgres";
	private static String password = "postgres";

	public static void main(String[] args) throws SQLException {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String sqlStr = "insert into c (typeid) values (1002);";

		try {
			Class.forName("org.postgresql.Driver");

			conn = DriverManager.getConnection(dbURL, userName, password);
			conn.setAutoCommit(true);

			stmt = conn.createStatement();
			stmt.executeUpdate(sqlStr, stmt.RETURN_GENERATED_KEYS);
			rs = stmt.getGeneratedKeys();
			
			if (rs.next()) {
				System.out.println("ID: " + rs.getInt(1));
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			if (rs != null) {
				rs.close();
			}

			if (stmt != null) {
				stmt.close();
			}

			if (conn != null) {
				conn.close();
			}
		}
	}
}
我的数据库使用的是PostgreSQL:

CREATE SEQUENCE user_info_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 25
  CACHE 1
  CYCLE;
ALTER TABLE user_info_seq
  OWNER TO postgres;

CREATE TABLE c
(
  cid integer NOT NULL DEFAULT nextval('user_info_seq'::regclass),
  typeid integer NOT NULL,
  CONSTRAINT pk_c_aid PRIMARY KEY (cid )
)
WITH (
  OIDS=FALSE
);
ALTER TABLE c
  OWNER TO postgres;

要注意的是,主键字段的值不能由Java代码中的SQL语句去插入,必需是自动生成的。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值