「java主键id」java主键重复异常

博主:adminadmin 2023-01-12 03:18:07 827

今天给各位分享java主键id的知识,其中也会对java主键重复异常进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中实体类用uuid做主键时怎么设计

// 如果使用的JDK1.5的话,那么生成UUID变成了一件简单的事,以为JDK实现了UUID:

java.util.UUID,直接调用即可.

UUID uuid = UUID.randomUUID();

String s = UUID.randomUUID().toString();//用来生成数据库的主键id非常不错。。

//UUID是由一个十六位的数字组成,表现出来的形式例如

//550E8400-E29B-11D4-A716-446655440000

java 用 jdbc 插入一条信息返回当前信息的主键id 怎样写 oracle的数据库 主键序列自增

有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列。

一、自增长主键

--首先建一个表TEST

create table TEST

(

NID int PRIMARY KEY,

test1 varchar2(20),

test2 varchar2(20),

test3 varchar2(20),

test4 varchar2(20),

test5 varchar2(20)

)

-- 再建一个序列SEQ_TEST

create sequence SEQ_TEST

minvalue 1 --最小值

nomaxvalue --不设置最大值

start with 1 --从1开始计数

increment by 1 --每次加1个

nocycle --一直累加,不循环

nocache; --不建缓冲区

以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!)

你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:

CREATE OR REPLACE TRIGGER tg_test

BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)

begin

select seq_test.nextval into:new.nid from dual;

end;

下面是测试

select * from test

insert into test(nid,test1) values(6,'aaa')

insert into test(test1) values('bbb')

在java中 主键生成策略(hibernate)都是指的是id的吗

主键生成策略是指

grnerator

class="native"/

1、

native

对于

oracle

采用

Sequence

方式,对于MySQL

SQL

Server

采用identity(自增主键生成机制),native就是将主键的生成工作交由数据库完成,hibernate不管(很常用)

2、assigned

在插入数据的时候主键由用户自己添加,hibernate也不管(很常用)

3、increment

插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法

4、sequence

调用数据库的sequence来生成主键,要设定序列名,不然hibernate无法找到:

param

name="sequence"NAME_SEQ/param(Oracle中很常用)

5、identity

使用SQL

Server

MySQL

的自增字段,这个方法不能放到

Oracle

中,Oracle

不支持自增字段,要设定sequence(MySQL

SQL

Server

中很常用)

6、hilo

使用hilo生成策略,要在数据库中建立一张额外的表,默认表名为hibernate_unique_key,默认字段为integer类型,名称是next_hi(比较少用)

我们也可以自己设置自定义的表名和字段名

id

name="id"

type="integer"

column

name="id"/

generator

class="hilo"

param

name="my_unique_key"/

param

column="next_hi"/

/generator

/id

7、sehilo

通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持

Sequence

的数据库,如

Oracle(比较少用)

8、uuid.hex

hibernate会算出一个128位的唯一值插入

9、uuid.string

hibernate会算出一个16位的值插入

10、foreign

使用外部表的字段作为主键

11、select

使用触发器生成主键(主要用于早期的数据库主键生成机制,少用)

java获得刚刚更新的记录集的id(主键)

在你执行插入语句后,随后执行这个查询:

ResultSet rs=st.executeQuery("SELECT @@IDENTITY AS currentID")

if(rs.next()){

System.out.println(rs.getLong("currentID")); //返回id

}

java项目中,用3个id为一个唯一主键,怎么实现

两种方案

第一种方案, 你在添加库存时, 把用户输入作为条件查询一下数据库, 也就是

select count(*) from kucun where product=** and warese=** and unit=**

查询结果如果返回值0, 表示库中已经有一条这样的记录了, 所以你就弹出提示让用户修改值后再进行插入, 此处可以用AJAX验证

第二种方案, 把数据库的这三个字段设置为联合主键, 插入时不需要验证直接插入, 如果数据相同则会报错

你try/catch一下代码, 在catch里对异常进行判断, 如果是主键异常则提示用户修改数据后插入

推荐第一种

JAVA servlet中怎么根据JSP页面传来的ID,用hql语句查询主键ID里的信息?

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

//获取请求参数

int id = Integer.parseInt(request.getParameter("id"));

//调用dao层将这个id的学生找到

StudentDao sd = new StudentDao();

Student s = sd.findById(id);

//将学生对象保存到request范围

request.setAttribute("s", s);

//使用请求转发,让修改页面展示将要被修改的学生信息

request.getRequestDispatcher("update.jsp").forward(request, response);

out.flush();

out.close();

这是servlet里面的内容

public Student findById(int id){

Student s = null;

Connection conn = null;

PreparedStatement pstm = null;

ResultSet rs = null;

String sql = "select * from student where stuid=?";

//获取连接

conn = BaseDao.getConn();

try {

pstm = conn.prepareStatement(sql);

pstm.setInt(1, id);

//执行查询

rs = pstm.executeQuery();

if(rs.next()){

int stuId = rs.getInt("stuid");

String stuName = rs.getString("stuname");

String stuSex = rs.getString("stusex");

int stuAge = rs.getInt("stuage");

String stuBid = rs.getString("stubid");

//先将数据封装到Student对象中

s = new Student(stuId, stuName, stuSex, stuAge, stuBid);

//将对象放入集合

}

} catch (SQLException e) {

e.printStackTrace();

}finally{

BaseDao.closeAll(conn, pstm, rs);

}

return s;

}

//这是写在Dao里面的内容

//这个是BaseDao   加载驱动 获取链接的

public class BaseDao{

//加载驱动

static{

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

//获取连接

public static Connection getConn(){

Connection conn = null;

try {

conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "130130");

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

//关闭所有资源

public static void closeAll(Connection conn,Statement st,ResultSet rs){

try {

if(null!=rs){

rs.close();

}

if(null!=st){

st.close();

}

if(null!=conn){

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

关于java主键id和java主键重复异常的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。