Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public Map<String, List<Object>> callProcedure(String procName, Object... args) {
- final Map<String, ProcedureData> storedProcedures = databaseFactory.getStoredProcedures();
- final ProcedureData procedureData = storedProcedures.get(procName);
- if (procedureData == null) {
- log.warn("Can't exec procedure with name [{}] - not found in database metadata!", procName);
- return null;
- }
- if (args.length != procedureData.getParams().size()) {
- log.warn("Can't exec procedure with name [{}] - declared parameters not math!", procName);
- return null;
- }
- final String callString = createCallString(procName.toLowerCase(), procedureData, args);
- try (Connection connection = databaseFactory.getConnection();
- CallableStatement callableStatement = connection.prepareCall(callString)) {
- boolean execute = callableStatement.execute();
- if (execute) {
- final Map<String, List<Object>> data = new HashMap<>();
- while (execute) {
- final ResultSet resultSet = callableStatement.getResultSet();
- final ResultSetMetaData metaData = resultSet.getMetaData();
- while (resultSet.next()) {
- for (int i = 1; i < metaData.getColumnCount() + 1; i++) {
- final String columnName = metaData.getColumnName(i);
- final Object object = resultSet.getObject(i);
- final List<Object> values = data.get(columnName);
- if (values != null) {
- values.add(object);
- } else {
- data.put(columnName, Collections.singletonList(object));
- }
- }
- resultSet.close();
- }
- execute = callableStatement.getMoreResults();
- }
- return data;
- }
- } catch (SQLException e) {
- log.error("", e);
- }
- return Collections.emptyMap();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement