JDBC 调用远程服务器异常
问题
根据官方教程 -JDBC 调用远程服务器远程执行 SPL 报错。
版本
服务器 SPL 版本:
Java 程序依赖版本:
<dependency>
<groupId>com.scudata.esproc</groupId>
<artifactId>esproc</artifactId>
<version>20230228</version>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>60.3</version>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1.3</version>
</dependency>
raqsoftConfig.xml
<?xml version="1.0" encoding="UTF-8"?><Config Version="3">
<Runtime>
<Esproc>
<charSet>UTF-8</charSet>
<splPathList>
<splPath>D:\Projects\qian-mo\qianmo-tools\qianmo-esproc\src\main\resources\spl</splPath>
</splPathList>
<dateFormat>yyyy-MM-dd</dateFormat>
<timeFormat>HH🇲🇲ss</timeFormat>
<dateTimeFormat>yyyy-MM-dd HH🇲🇲ss</dateTimeFormat>
<mainPath/>
<tempPath/>
<bufSize>65536</bufSize>
<parallelNum>1</parallelNum>
<cursorParallelNum>1</cursorParallelNum>
<blockSize>1048576</blockSize>
<nullStrings>nan,null,n/a</nullStrings>
<fetchCount>9999</fetchCount>
<extLibsPath/>
<!--<customFunctionFile>customFunctions.properties</customFunctionFile>-->
<serialNo/>
</Esproc>
<Logger>
<Level>DEBUG</Level>
</Logger>
</Runtime>
<JDBC>
<load>Runtime</load>
<Units>
<Unit>127.0.0.1:8281</Unit>
</Units>
</JDBC>
</Config>
Java 代码
Class.forName("com.esproc.jdbc.InternalDriver");
try {
Connection con = null;
Statement st;
ResultSet set;
//建立连接
//onlyServer用于控制当前jdbc是否对服务器进行远程计算,为true表示远程计算;false时表示本地计算
// 注意:属性值为false,当SPL语句使用calldfx或dfx时,会先使用本地计算,如未计算成功则会进行远程计算
con = DriverManager.getConnection("jdbc:esproc:local://?onlyServer=true");
//直接执行SPL语句,返回结果集
st = con.createStatement();
ResultSet rs = st.executeQuery("=5.(~*~)");
while (rs.next()) {
System.out.println(JSONUtil.toJsonStr(rs.getString(1)));
}
//关闭连接
if (con != null) {
con.close();
}
} catch (Exception ex) {
ex.printStackTrace();
throw new ServiceException(ex.getMessage());
}
这个看起来像是 jdbc 端跟节点机端用的不同的 esproc-bin.jar 导致的;看报错代码行号,应该是 jdbc 端用的 esproc-bin.jar 不是最新代码。
检查一下,确认从节点机启动的环境下,将 esproc-bin.jar 覆盖到 jdbc 执行环境里面的该 jar,然后再试一遍。
测试的确是该问题导致的,谢谢