oracle账号已被锁定一次性获取多个oracle序列的值,实现关联表多数据的批量insert

业务 要求批量导入不小于10W条数据到 user 表,但是user表在 insert 每条数据的同时要 insert 一条对应数据到 customer表,

并且是以 customer 表的主键作为 user 表的外键。

所以想到要一次性获取多个 序列值,再把对应的序列给不同表,并分别作为两个表的主键和外键的值。

方法很简单 就一句代码 :

String squence ="select USR_CUSTOMER_SEQ.nextval cust_id from (select 1 from all_objects where rownoracle账号um <= "+usrlist.size()+")";      List squenceList = BatchInsert.selectSql(squence);

usrlist 是解析表格后得到的要导入的 user数据 集合,有多少条数据就取多少个序列值。

selectSql 方法 只是JDBC连接数据库 执行了这句SQL 并返回了查到的 序列值,拿到这个序列集合就可以根据业务作后续实现了。

  // 单纯查询      public static List selectSql(String sql){        Connection conn = null;//定义为空值        Statement stmt = null;        ResultSet rs = null;        conn = getConnection();        List list = new ArrayList();        try {         stmt = conn.createStatement();//创建一个Statement语句对象         rs = stmt.executeQuery(sql);//执行sql语句         while(rs.next()){         list.add(rs.getString("cust_id"));         }     } catch (SQLException e) {         e.printStackTrace();     }finally{     try {conn.close();stmt.cancel();    rs.close(); }catch (SQLException e) {e.printStackTrace(); }     } return list;   }     

getConnection 方法是获取数据库连接:

   public static Connection getConnection(){ //连接数据库的方法                    try {                Class.forName("oracle.jdbc.driver.OracleDriver"); //初始化驱动包                     conn = DriverManager.getConnection(url, user, password);            } catch (Exception e) {                e.printStackTrace();            }          return conn;    } 
此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。