一次性获取多个oracle序列的值,实现关联表多数据的批量insert
发布时间:2020-12-12 14:41:05 所属栏目:百科 来源:网络整理
导读:maven/ Java /web/bootstrap/dataTable/app开发 QQ群:566862629。希望更多人一起帮助我学习。 业务 要求批量导入不小于10W条数据到 user 表,但是user表在 insert 每条数据的同时要 insert 一条对应数据到 customer表, 并且是以 customer 表的主键作为 use
maven/Java/web/bootstrap/dataTable/app开发QQ群:566862629。希望更多人一起帮助我学习。
业务 要求批量导入不小于10W条数据到 user 表,但是user表在 insert 每条数据的同时要 insert 一条对应数据到 customer表, 并且是以 customer 表的主键作为 user 表的外键。
所以想到要一次性获取多个 序列值,再把对应的序列给不同表,并分别作为两个表的主键和外键的值。
方法很简单 就一句代码 :
String squence ="select USR_CUSTOMER_SEQ.nextval cust_id from (select 1 from all_objects where rownum <= "+usrlist.size()+")"; List<String> squenceList = BatchInsert.selectSql(squence); usrlist是解析表格后得到的要导入的 user数据 集合,有多少条数据就取多少个序列值。 selectSql 方法 只是JDBC连接数据库 执行了这句SQL 并返回了查到的 序列值,拿到这个序列集合就可以根据业务作后续实现了。
// 单纯查询 public static List<String> selectSql(String sql){ Connection conn = null;//定义为空值 Statement stmt = null; ResultSet rs = null; conn = getConnection(); List<String> list = new ArrayList<String>(); 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; } 另 批量导入实现见博文:关联表多数据的批量insert (批量导入,测试10W条数据用时46秒) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |