如题
ps:该主键不是序列,只是一般的自增列

解决方案 »

  1.   


    public String insert(Entity entity) {
        String mainKey = "";
        try {
            getHibernateTemplate().save(entity);    
            mainKey = entity.getMainKey();
        }catch(Exception ex) {
            ex.printStackTrace();
        }finally {
            getHibernateTemplate.flush();
            getHibernateTemplate.close();
        }
        return mainKey;
    }
    应该可行的吧,呵呵
      

  2.   

    这个框架只用了Struts1,没用Hibernate,所以。
      

  3.   


    估计你很少写JDBC   现在很多人会用点ssh,但不会写jdbc
      

  4.   

    这个需要 JDBC 驱动程序支持,获得自动生成的列中值只有在支持 JDBC 3.0 规范的驱动程序才支持。Java codeimport java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;publicclass OracleTest {publicstaticvoid 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());
                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);
            }
        }
    }
    这个给你参考一下
      

  5.   

    oracle自生不带自增列,不过可以概要trigger实现,你的自增列是咋个实现的
      

  6.   

    Oracle只有序列没有自增列。
    你要实现列的自增只能通过java代码自己实现,在这个过程中可以保存主键,也没必要在插入数据的时候再返回主键了。
      

  7.   

    ResultSet rs = null;
    stmt = con.createStatement();
    stmt.execute(sql);
    rs = stmt.getGeneratedKeys();
    int key = 0;
    if (rs.next()) {
    key = rs.getInt(1);
    }
    return key;//此处的key即为楼主想要的东西
      

  8.   

    oracle 只有 sequence 。先取得一个序列的下一个值:
    select myseq.nextval from dual;然后再把这个值当成主键值插入数据表:
    insert into mytable (id, ...) values (id_val, ...)
      

  9.   

    我也纳闷oracle 的自增列向来都是用序列来实现的。
    不是楼主是怎么做到的
      

  10.   


    JDBC实现就是这个样子的 希望LZ出面解释ORACLE自增是咋回事..
      

  11.   

    LZ可以写个方法获取当前时间,把当前时间(精确到毫秒)作为记录的id与记录一起存入数据库,再输出你的id,这样实现了id增长也可以实现id输出
      

  12.   


    正是因为JDBC写够了 才那样做的 
      

  13.   

    正解,先取Sequences,然后再插入数据
      

  14.   

    只能用这个,如果jdbc驱动不支持,则没办法了。
      

  15.   

    jdbc实现没有成功,原因暂未查明。
    我用了存储过程,如下:create or replace procedure getid(v_sql in varchar , v_id out varchar) 
    as   begin       execute immediate v_sql 
          returning into v_id; 
      end; 
    sql语句例子:insert into test(id,name)values(13,'jimmy') returning id into :1
    java程序里调用这个存储过程,传入sql语句,取得返回值v_id;希望对碰到类似问题的朋友们有帮助。
      

  16.   

    插入的时候直接获得主键不可以吗?
    insert into mytable (id, ...) values (myseq.nextval, ...) 
      

  17.   

    sql:insert into table values(xxx_seq.nextval,?,?,?)
    利用Statement.getGeneratedKeys得到主键ID