Добавление агрегатной функции во внешнюю базу данных H2

Я пытаюсь создать агрегатную функцию в моей базе данных H2, используя Java. Функция должна возвращать настраиваемое вычисление медианы из заданного столбца Double. Этот расчет заключается в использовании только тех значений, которые достаточно близки к среднему значению с использованием значения int max_variance . Для этого я создал класс:

package custommedian;

public class CustomMedian implements org.h2.api.AggregateFunction{
    final int max_variance = 7;
    java.util.LinkedList<Double> values = new java.util.LinkedList<Double>();

    @Override
    public void init(java.sql.Connection cnctn) throws java.sql.SQLException {
        // I ignored this
    }

    @Override
    public int getType(int[] ints) throws java.sql.SQLException {
       return java.sql.Types.DOUBLE;
    }

    @Override
    public void add(Object o) throws java.sql.SQLException {
        values.add((Double)o);
    }

    @Override
    public Object getResult() throws java.sql.SQLException {
        double average = 0;
        java.util.Iterator<Double> i;
        java.util.LinkedList<Double> properValues = new java.util.LinkedList<Double>();

        // Get average value
        for( i = values.iterator(); i.hasNext(); ) {
            average += i.next();    
        }
        average = average / values.size();

        // Filter out invalid values
        for( i = values.iterator(); i.hasNext(); ) {
            double value = i.next();
            if (value - max_variance < average && value + max_variance > average){
                properValues.add(value);
            }
        }

        // Sort list
        java.util.Collections.sort(properValues);

        // Return median
        int size = properValues.size();
        if (size > 0){
            int pos = ((int) size/2);
            // Odd size
            if ((size%2) == 1 ) return properValues.get(pos);
            // Even size
            else return ( properValues.get(pos-1) + properValues.get(pos) ) / 2;
        }
        else 
            return null;
    }
}

И теперь я должен скомпилировать его, чтобы он был доступен для базы данных, и использовать эту команду:

CREATE AGGREGATE MEDIAN FOR "custommedian.CustomMedian";

Как я должен это сделать?

Я попытался поместить файл .jar в ту же папку, что и файл базы данных, но, похоже, не нашел класс:

Class "custommedian.CustomMedian" not found; SQL statement:

Кто-нибудь может сказать мне, что еще мне нужно сделать, чтобы эта работа заработала?

Заранее большое спасибо!

РЕДАКТИРОВАТЬ:

Решено:

Как и предложил Лукас, я в конечном итоге встраивал банку H2 в свое приложение, и таким образом нет проблем с путями к классам.

7
задан emlai 19 August 2015 в 19:04
поделиться