如何在java中获取Oracle里获取自增ID 在线等 谢谢啦

sky_hebiao 2009-07-27 01:57:43
在做一个项目,现在遇到了个问题,
如何在java中获取Oracle里获取自增ID
不能对数据库修改,只能在代码里改动。
...全文
397 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobocici 2009-07-27
  • 打赏
  • 举报
回复
10l说的很好了,看看oracle jdbc编程就很明白了
zl3450341 2009-07-27
  • 打赏
  • 举报
回复

insert into profession values(professionId.nextval,'医疗');


取的时候也这样取啊
铁匠梁 2009-07-27
  • 打赏
  • 举报
回复
oracle的序列满足楼主需求,10楼正解
  • 打赏
  • 举报
回复
Oracle 没有自增列吧,只有序列,呵呵。

参考下面的代码,Oracle 的 JDBC 驱动必须实现 JDBC 3.0 规范:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;

public class OracleTest {

public static void main(String[] args) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = OracleConnectionFactory.getConnection();
DatabaseMetaData dmd = con.getMetaData();

System.out.println("database product name: " + dmd.getDatabaseProductName());
System.out.println("database product version: " + dmd.getDatabaseProductVersion());
// 这一句如果返回的是 true 那下面的语句可以正常执行
System.out.println("supports generate keys? " + dmd.supportsGetGeneratedKeys());

String sql = "INSERT INTO t_mt_stat (id, mt_time, stat, stat_time) " +
"VALUES (s_mt_stat.nextval, ?, ?, ?)";

ps = con.prepareStatement(sql, new String[]{"ID"}); // 后面一个参数表示需要返回的列

ps.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
ps.setString(2, "Y");
ps.setTimestamp(3, new Timestamp(System.currentTimeMillis()));
ps.executeUpdate();

if(dmd.supportsGetGeneratedKeys()) {
rs = ps.getGeneratedKeys();
while(rs.next()) {
// 如果使用 rs.getInt("ID") 会报错,奇怪的 Oracle JDBC 驱动!
System.out.println("ID: " + rs.getInt(1));
}
}

} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(rs, ps, con);
}
}
}

closewbq 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sky_hebiao 的回复:]
要是用户多了呢,比如刚保存一个数据,我刚要去却被其他用户取到了怎么办呢?
是多用户的
[/Quote]
线程同步方法
年华似水 2009-07-27
  • 打赏
  • 举报
回复
select seq.nextVal from dual;

先在java中查出来,通过上面的sql语句,然后放到一个变量中不就行了
sangshusen_1988 2009-07-27
  • 打赏
  • 举报
回复
oracle的序列,你取一个,下次人再去取的话,肯定是+1的
sky_hebiao 2009-07-27
  • 打赏
  • 举报
回复
我是想到去最大的Id max()可是,在多用户的环境下怎么办呢,
sky_hebiao 2009-07-27
  • 打赏
  • 举报
回复
要是用户多了呢,比如刚保存一个数据,我刚要去却被其他用户取到了怎么办呢?
是多用户的
closewbq 2009-07-27
  • 打赏
  • 举报
回复
max(ID)+1
商科程序员 2009-07-27
  • 打赏
  • 举报
回复
先查序列ID,再插入数据库.
goldlive_8888 2009-07-27
  • 打赏
  • 举报
回复
Oracle 中可以取到唯一码 sys_guid()
如果想自增,可以使用序列
marcblue 2009-07-27
  • 打赏
  • 举报
回复
建立一个序列:
create sequence seq_atable minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache
insert时调用

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧