oracle – 带有返回子句的JDBC批量插入

前端之家收集整理的这篇文章主要介绍了oracle – 带有返回子句的JDBC批量插入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用JDBC Batch Insert语句时,有没有办法在JAVA中使用return子句获取受影响行的值?我能够获得受影响的单行所需的值.但不是所有批量插入?

代码

  1. try {
  2. String query = "INSERT INTO temp ( "
  3. + "org_node_id,org_node_category_id,org_node_name,"
  4. + "customer_id,created_by,created_date_time,"
  5. + "updated_date_time,activation_Status )"
  6. + " VALUES (seq_org_node_id.nextval,11527,'Abcd',9756,1,sysdate,'AC')"
  7. +" returning org_node_id,org_node_name INTO ?,?";
  8.  
  9. con = DBUtils.getOASConnection();
  10.  
  11. OraclePreparedStatement ps = (OraclePreparedStatement) con.prepareStatement(query);
  12. ps.registerReturnParameter(1,Types.INTEGER);
  13. ps.registerReturnParameter(2,Types.VARCHAR);
  14. ps.execute();
  15.  
  16. ResultSet rs = ps.getReturnResultSet();
  17. rs.next();
  18.  
  19. System.out.println("Org ID : "+ rs.getInt(1));
  20. System.out.println("Org Name : "+ rs.getString(2));
  21.  
  22. } catch (sqlException e) {
  23. e.printStackTrace();
  24. }
ojdbc不支持批处理INSERT .. RETURNING语句,但 bulk insertion可以使用 PL/SQL’s FORALL命令工作.

给出一张桌子……

  1. CREATE TABLE x (
  2. i INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,j VARCHAR2(50),k DATE DEFAULT SYSDATE
  3. );

…和类型……

  1. CREATE TYPE t_i AS TABLE OF NUMBER(38);
  2. /
  3. CREATE TYPE t_j AS TABLE OF VARCHAR2(50);
  4. /
  5. CREATE TYPE t_k AS TABLE OF DATE;
  6. /

…你可以像running a bulk insert,and bulk collecting the results (as I’ve shown also in this blog post)一样解决这个限制:

  1. try (Connection con = DriverManager.getConnection(url,props);
  2. CallableStatement c = con.prepareCall(
  3. "DECLARE "
  4. + " v_j t_j := ?; "
  5. + "BEGIN "
  6. + " FORALL j IN 1 .. v_j.COUNT "
  7. + " INSERT INTO x (j) VALUES (v_j(j)) "
  8. + " RETURNING i,j,k "
  9. + " BULK COLLECT INTO ?,?,?; "
  10. + "END;")) {
  11.  
  12. // Bind input and output arrays
  13. c.setArray(1,((OracleConnection) con).createARRAY(
  14. "T_J",new String[] { "a","b","c" })
  15. );
  16. c.registerOutParameter(2,Types.ARRAY,"T_I");
  17. c.registerOutParameter(3,"T_J");
  18. c.registerOutParameter(4,"T_K");
  19.  
  20. // Execute,fetch,and display output arrays
  21. c.execute();
  22. Object[] i = (Object[]) c.getArray(2).getArray();
  23. Object[] j = (Object[]) c.getArray(3).getArray();
  24. Object[] k = (Object[]) c.getArray(4).getArray();
  25.  
  26. System.out.println(Arrays.asList(i));
  27. System.out.println(Arrays.asList(j));
  28. System.out.println(Arrays.asList(k));
  29. }

结果是:

  1. [1,2,3]
  2. [a,b,c]
  3. [2018-05-02 10:40:34.0,2018-05-02 10:40:34.0,2018-05-02 10:40:34.0]

猜你在找的Oracle相关文章