DQL 超维分析 - 4 应用集成

4 应用集成

前面提过基于数据库的 DQL 运行过程:

应用集成 DQL(JDBC)就可以访问 DQL 服务,这里需要先部署 DQL 服务。

部署 DQL 服务

第一步需要引入必要的 JAR 包,部署润乾报表 [安装根目录]\report\web\webapps\demo\WEB-INF\lib 下三个包:

datalogic.jar        	报表DQL Server计算引擎及JDBC驱动包
esproc-bin-***.jar     	报表DQL Server基础包
json-20240303.jar      	解析json格式串

然后部署 service 目录。service 目录是 DQL Server 的主文件目录,可包含多个 DQL 服务。

每个目录代表一个 DQL 服务,从应用角度可以将 DQL 服务看成逻辑数据库,如这里的 datalogic,目录名就是服务名称。

编辑 server.xml(服务配置文件),指定服务地址、端口以及服务名(目录名)等信息:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SERVER autoStart="false" host="127.0.0.1" license="" log="true" port="3366" timeout="60000">
<SERVICE name="datalogic"/>
<SERVICE name="tpch"/>
</SERVER>

然后配置单个 DQL 服务,以 datalogic 为例,将建好的模型(demo.lmd)放到 conf 目录下,编辑 service.xml(单个服务的配置文件),配置元数据、数据库连接等信息:

<?xml version="1.0" encoding="UTF-8"?>
<SERVICE logicmetadata="demo.lmd">
    <DB type="HSQL">
       <CONNECTION name="db1" type="jndi" jndi="java:comp/env/report" user="" password=""/>
       <CONNECTION name="db2" type="jdbc" url="jdbc:hsqldb:hsql://127.0.0.1/dqldemo" driver="org.hsqldb.jdbcDriver" user="sa" password=""/>
    </DB>

    <USERS>
       <USER name="root" password="root">
             <CONNECTION name="db2"/>
             <CONNECTION name="db1" user="wn" password="wn"/>
       </USER>
    </USERS>
</SERVICE>

配置完成后就可以启动 DQL 服务(润乾报表 [安装根目录]\report\bin 下:startDQLSERVER.bat / startDQLSERVER.sh)。

应用调用

由于是标准 JDBC 方式,在 Java 里调用与其他数据库类似。在应用需要先集成 DQL JDBC 驱动:datalogic.jar。
然后在程序中调用:

public void DQLServerJDBC() {
    Connection con=null;
    try {
        Class.forName("com.datalogic.jdbc.LogicDriver");
        con = DriverManager.getConnection("jdbc:datalogic://192.168.0.147:3366/datalogic");
        PreparedStatement stmt = con.prepareStatement("SELECT 部门.名称,员工表.avg(年龄) FROM 员工表 BY 部门", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        ResultSet set = stmt.executeQuery();
    } catch (SQLException e){
        System.out.println(e);
    }finally{
        if (con!=null) con.close();
    }
}

其中 url 里的 datalogic 就是前面配置的服务名。
更详细的 DQL 部署集成内容可参考:https://d.raqsoft.com.cn:6443/report/dql/dqlserverbs33.html