我写了个servlet,往oracle数据库表里插入记录。现在有个问题,就是在我要插入记录的那个表里有个intger类型的ID字段,这个字段的功能就是每插入一条记录就自动增长1. 而我在servelet中往表里插入记录时又不可能每次为了这个ID值每次修改insert语句。我知道oracle中的序列就是这个自动增长的功能,但那个我只会在数据库中使用,而在servlet根本就不知道怎么创建这个序列,要是可以跟在servlet中使用insert语句那样就好了!!请高手不吝赐教!!!!
这是我的insert语句:
String sql = "insert into blog(id,title,content,category_id,created_time)values (4,?,?,?,sysdate)";说了这么多,我的重点就是怎样在servlet中使得那个ID字段的值能够自动增长!再次请高手赐教!!!

解决方案 »

  1.   

    创建一个序列 SEQ_EMP
    CREATE SEQUENCE SEQ_EMP
      MINVALUE 1
      MAXVALUE 99999999
      START WITH 1
      INCREMENT BY 1
      NOCACHE;这么调用
    String sql = "insert into blog(id,title,content,category_id,created_time)values (SEQ_EMP.NEXTVAL,?,?,?,sysdate)";
      

  2.   

    select SEQ_EMP.NEXTVAL from dual
      

  3.   

    我来做个总结,1 如果你希望知道这个值是什么。 使用 2楼的方式 获取值,再进行insert。
    2 如果你不关心里面的值是几。 使用1楼的方法,直接插入就行了。
      

  4.   

    这个需要 JDBC 驱动程序支持,获得自动生成的列中值只有在支持 JDBC 3.0 规范的驱动程序才支持。不过现在的 JDBC 驱动基本上都已经支持 JDBC 4.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());
                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);
            }
        }
    }