public boolean ExecuteArrayCall(String SQL, Object[] params,
                                    int[] paramsout) throws SQLException {
        checkedConnection();
        CallableStatement cl = getConnection().prepareCall(SQL);
        if (params != null) {
            prepareParams(cl, params);
        } else {
            paramsout = null;
        }

        Integer tp;
        if (paramsout != null) {
            for (int i = 0; i < paramsout.length; i++) {
                if (paramsout[i] > params.length) {
                    throw new RuntimeException("Param number not found");
                }
                tp = mapTypeToDB.get(params[paramsout[i]].getClass());
                tp = tp == null ? Types.VARCHAR : tp;
                cl.registerOutParameter(paramsout[i] + 1, tp);
            }
        }
        boolean res;
        synchronized (getConnection()) {
            res = cl.execute();
        }
        if (paramsout != null) {
            for (int i = 0; i < paramsout.length; i++) {
                params[paramsout[i]] = cl.getObject(paramsout[i] + 1);
            }
        }
        cl.close();
        return res;
    }