content: package jnpf.base.util;
  
  import jnpf.exception.DataException;
  import lombok.Cleanup;
  import lombok.extern.slf4j.Slf4j;
  
  import java.sql.Connection;
  import java.sql.PreparedStatement;
  import java.sql.SQLException;
  
  /**
   * Oracle数据建模使用
   *
   * @author JNPF开发平台组
   * @version V3.1.0
   * @copyright 引迈信息技术有限公司（https://www.jnpfsoft.com）
   * @date 2021-04-08
   */
  @Slf4j
  public class OracleUtil {
      /**
       * 自定义sql语句(适合增、删、改)  Oracle数据建模专用
       * 输入的语句需要全小写，除了数据
       */
      public static int oracleCustom(Connection conn, String sql) throws DataException {
          int result = 0;
          try {
              String dbType = conn.getMetaData().getDatabaseProductName().trim().toLowerCase();
              if ("oracle".equals(dbType)) {
                  //关闭事务自动提交
                  conn.setAutoCommit(false);
                  String[] sqls = sql.split(";");
                  @Cleanup PreparedStatement preparedStatement = null;
                  for (String sqlOne : sqls) {
                      if (sqlOne.toLowerCase().contains("insert") && sqlOne.replaceAll(" ","").contains("),(")) {
                          String[] splitSql = sqlOne.split("\\),\\(");
                          //centerSql取出INTO TEST_DETAILS ( F_ID, F_RECEIVABLEID)
                          String centerSql = splitSql[0].split("VALUES")[0].split("INSERT")[1];
                          //for循环尾部
                          String lastSql=splitSql[splitSql.length-1];
                          splitSql[splitSql.length-1]=lastSql.substring(0,lastSql.length()-1);
                          for (int i = 0; i < splitSql.length; i++) {
                              //第一个语句INSERT INTO TEST_DETAILS ( F_ID, F_RECEIVABLEID) VALUES ( '71', '28bf3436e5d1'
                              //需要拼接成 INSERT INTO TEST_DETAILS ( F_ID, F_RECEIVABLEID) VALUES ( '71', '28bf3436e5d1'）
                              if(i==0){
                                  System.out.println(splitSql[i]+")");
                                  preparedStatement=conn.prepareStatement(splitSql[i]+")");
                                  preparedStatement.execute();
                                  preparedStatement.close();
                              }else{
                                  preparedStatement=conn.prepareStatement("INSERT "+centerSql+"VALUES ("+splitSql[i]+")");
                                  System.out.println("INSERT "+centerSql+"VALUES ("+splitSql[i]+")");
                                  preparedStatement.execute();
                                  preparedStatement.close();
                              }
                          }
                          result++;
                      } else {
                          preparedStatement = conn.prepareStatement(sqlOne);
                          preparedStatement.executeUpdate();
                          result++;
                      }
                  }
              } else {
                  //开启事务
                  conn.setAutoCommit(false);
                  String[] sqls = sql.split(";");
                  PreparedStatement preparedStatement;
                  for (String sqlOne : sqls) {
                      preparedStatement = conn.prepareStatement(sqlOne);
                      preparedStatement.executeUpdate();
                      result++;
                  }
              }
              //提交事务
              conn.commit();
              return result;
          } catch (Exception e) {
              e.printStackTrace();
              log.error(e.getMessage());
              try {
                  conn.rollback();
              } catch (SQLException q) {
                  log.error("数据错误:" + q.getMessage());
              }
              throw new DataException("操作失败");
          } finally {
              try {
                  if (conn != null) {
                      conn.close();
                  }
              } catch (Exception e) {
                  log.error(e.getMessage());
              }
          }
      }
  
  }
  
  