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

本文介绍了如何在项目开发中使用getGeneratedKeys()方法从PostgreSQL数据库返回用户编号,特别关注了在用户访问时判断并插入用户表的操作。通过示例代码展示了实现过程,确保主键字段由数据库自动生成。

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

基于这种情况,就需要用到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语句去插入,必需是自动生成的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值