在做一个项目,现在遇到了个问题,
如何在java中获取Oracle里获取自增ID 
不能对数据库修改,只能在代码里改动。

解决方案 »

  1.   

    建立一个序列:
    create sequence seq_atable minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache
    insert时调用
      

  2.   

    Oracle 中可以取到唯一码 sys_guid()
    如果想自增,可以使用序列
      

  3.   

    我是想到去最大的Id max()可是,在多用户的环境下怎么办呢,
      

  4.   

    oracle的序列,你取一个,下次人再去取的话,肯定是+1的
      

  5.   

    select seq.nextVal from dual;先在java中查出来,通过上面的sql语句,然后放到一个变量中不就行了
      

  6.   

    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);
            }
        }
    }
      

  7.   

    oracle的序列满足楼主需求,10楼正解
      

  8.   


    insert into profession values(professionId.nextval,'医疗');
    取的时候也这样取啊
      

  9.   

    10l说的很好了,看看oracle jdbc编程就很明白了