「java主键id」java主键重复异常
今天给各位分享java主键id的知识,其中也会对java主键重复异常进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中实体类用uuid做主键时怎么设计
- 2、java 用 jdbc 插入一条信息返回当前信息的主键id 怎样写 oracle的数据库 主键序列自增
- 3、在java中 主键生成策略(hibernate)都是指的是id的吗
- 4、java获得刚刚更新的记录集的id(主键)
- 5、java项目中,用3个id为一个唯一主键,怎么实现
- 6、JAVA servlet中怎么根据JSP页面传来的ID,用hql语句查询主键ID里的信息?
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主键重复异常的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。