Что я должен использовать вместо устаревшего mondrian.olap.Connection :: execute? - PullRequest
0 голосов
/ 21 ноября 2018

Итак, я пытаюсь использовать Mondrian 3.14 в Java 1.8, поэтому я сделал что-то вроде этого:

String catalogFilePath = "<path>/mdx_schema.xml";
String connectUrl = "Provider=mondrian;" +
            "Jdbc=jdbc:postgresql://example.com:5432/database?user=user&password=pass;" +
            "JdbcDrivers=org.postgresql.Driver;" +
            "Catalog=file:" + catalogFilePath + ";";
Connection connection = DriverManager.getConnection(connectUrl, null);

String qs = "<query>";
Query q = connection.parseQuery(qs);
Result r = connection.execute(q);

Однако, как указано здесь , Connection::execute устарело:

Устаревший.Этот метод устарел и будет удален в mondrian-4.0.Он работает путем внутреннего создания заявления.Лучше использовать olap4j и явно создать оператор.

Итак, что я должен использовать в olap для выполнения запроса?

1 Ответ

0 голосов
/ 22 ноября 2018

Так что я действительно нашел ответ здесь :

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;

import org.olap4j.CellSet;
import org.olap4j.OlapConnection;
import org.olap4j.OlapStatement;
import org.olap4j.OlapWrapper;
import org.olap4j.layout.RectangularCellSetFormatter;
import java.sql.SQLException;

public static void main(String[] args) throws SQLException, ClassNotFoundException {
    Class.forName("mondrian.olap4j.MondrianOlap4jDriver");

    String catalogFilePath = "<path>/mdx_schema.xml";
    String connectUrl = "jdbc:mondrian:" +
    "Jdbc=jdbc:postgresql://example.com:5432/database?user=user&password=pass;" +
    "JdbcDrivers=org.postgresql.Driver;" +
    "Catalog=file:" + catalogFilePath + ";";

    Connection connection = DriverManager.getConnection(connectUrl);
    OlapWrapper wrapper = (OlapWrapper) connection;
    OlapConnection olapConnection = wrapper.unwrap(OlapConnection.class);
    OlapStatement statement = olapConnection.createStatement();

    String qs = "<query>";

    CellSet cellSet = statement.executeOlapQuery(qs);

    RectangularCellSetFormatter formatter = new RectangularCellSetFormatter(false);
    PrintWriter writer = new PrintWriter(System.out);
    formatter.format(cellSet, writer);
    writer.flush();

    connection.close();
}
...