Advertisement
Guest User

Untitled

a guest
May 27th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.73 KB | None | 0 0
  1. @Override
  2.     public Map<String, List<Object>> callProcedure(String procName, Object... args) {
  3.         final Map<String, ProcedureData> storedProcedures = databaseFactory.getStoredProcedures();
  4.         final ProcedureData procedureData = storedProcedures.get(procName);
  5.         if (procedureData == null) {
  6.             log.warn("Can't exec procedure with name [{}] - not found in database metadata!", procName);
  7.             return null;
  8.         }
  9.  
  10.         if (args.length != procedureData.getParams().size()) {
  11.             log.warn("Can't exec procedure with name [{}] - declared parameters not math!", procName);
  12.             return null;
  13.         }
  14.  
  15.         final String callString = createCallString(procName.toLowerCase(), procedureData, args);
  16.         try (Connection connection = databaseFactory.getConnection();
  17.              CallableStatement callableStatement = connection.prepareCall(callString)) {
  18.  
  19.             boolean execute = callableStatement.execute();
  20.             if (execute) {
  21.                 final Map<String, List<Object>> data = new HashMap<>();
  22.                 while (execute) {
  23.                     final ResultSet resultSet = callableStatement.getResultSet();
  24.                     final ResultSetMetaData metaData = resultSet.getMetaData();
  25.                     while (resultSet.next()) {
  26.                         for (int i = 1; i < metaData.getColumnCount() + 1; i++) {
  27.                             final String columnName = metaData.getColumnName(i);
  28.                             final Object object = resultSet.getObject(i);
  29.                             final List<Object> values = data.get(columnName);
  30.                             if (values != null) {
  31.                                 values.add(object);
  32.                             } else {
  33.                                 data.put(columnName, Collections.singletonList(object));
  34.                             }
  35.  
  36.                         }
  37.  
  38.                         resultSet.close();
  39.                     }
  40.  
  41.                     execute = callableStatement.getMoreResults();
  42.                 }
  43.                
  44.                 return data;
  45.             }
  46.  
  47.         } catch (SQLException e) {
  48.             log.error("", e);
  49.         }
  50.  
  51.         return Collections.emptyMap();
  52.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement