项目在fast jar 打包模式下,LocalFile.getFile() 不支持返回 resources 下的splx/dfx脚本文件
FengMingJian opened this issue · 6 comments
FengMingJian commented
项目在fast jar 打包模式下,LocalFile.getFile() 不支持返回 resources 下的splx/dfx脚本文件,会抛出“文件 {0} 不存在”异常
RQWangXiaoJun commented
请问方便发一下调用堆栈吗?
jar包里的文件只能读成InputStream,应该调用LocalFile.getInputStream取输入流
FengMingJian commented
raqsoftConfig.xml 配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Config Version="3">
<Runtime>
<DBList>
</DBList>
<Esproc>
<charSet>UTF-8</charSet>
<splPathList>
<splPath></splPath>
</splPathList>
<dateFormat>yyyy-MM-dd</dateFormat>
<timeFormat>HH:mm:ss</timeFormat>
<dateTimeFormat>yyyy-MM-dd HH:mm:ss</dateTimeFormat>
<mainPath></mainPath>
<tempPath></tempPath>
<bufSize>65536</bufSize>
<localHost/>
<localPort>0</localPort>
<parallelNum/>
<cursorParallelNum/>
<blockSize/>
<nullStrings>nan,null,n/a</nullStrings>
<fetchCount/>
<extLibsPath/>
</Esproc>
<Logger>
<Level>OFF</Level>
</Logger>
</Runtime>
<JDBC>
</JDBC>
</Config>
项目结构如下:
src
|---main
|---java
|---resources
|---raqsoftConfig.xml
|---STUDENT_SCORE_LIST.splx
Java 调用 代码如下:
Connection con = null;
java.sql.PreparedStatement st;
try
{
Class.forName("com.esproc.jdbc.InternalDriver");
con= DriverManager.getConnection("jdbc:esproc:local://");
st =con.prepareCall("call STUDENT_SCORE_LIST(?)");
st.setObject(1,"C:/Users/fengm/OneDrive/文档/学生成绩.xlsx");
st.execute();
ResultSet rs = st.getResultSet();
}
catch (Exception e)
{
e.printStackTrace();
}
调用堆栈信息如下:
java.sql.SQLException: 文件 STUDENT_SCORE_LIST 不存在
at com.esproc.jdbc.InternalStatement.executeJDBC(InternalStatement.java:286)
at com.esproc.jdbc.InternalStatement$1.run(InternalStatement.java:148)
Caused by: com.scudata.common.RQException: 文件 STUDENT_SCORE_LIST 不存在
at com.scudata.app.common.AppUtil.readCellSet(AppUtil.java:798)
at com.scudata.expression.fn.JDBCCall.calculate(JDBCCall.java:70)
at com.scudata.expression.Expression.calculate(Expression.java:143)
at com.scudata.expression.fn.Eval.calc(Eval.java:88)
at com.esproc.jdbc.JDBCUtil.execute(JDBCUtil.java:418)
at com.esproc.jdbc.InternalStatement.executeJDBC(InternalStatement.java:267)
... 1 more
集算器v2018这个版本是支持这样调用脚本文件的
RQWangXiaoJun commented
看异常信息跟最新版的jar包不匹配,我看了一下目前的实现应该没这个错误。
请换最新版的集算器的jar包试一下。
FengMingJian commented
替换了最新版(20220228版本)的jar包,依旧抛出以下错误信息,望请排除,谢谢
java.sql.SQLException: 文件 STUDENT_SCORE_LIST 不存在
at com.esproc.jdbc.InternalStatement.executeJDBC(InternalStatement.java:286)
at com.esproc.jdbc.InternalStatement$1.run(InternalStatement.java:148)
Caused by: com.scudata.common.RQException: 文件 STUDENT_SCORE_LIST 不存在
at com.scudata.app.common.AppUtil.readCellSet(AppUtil.java:795)
at com.scudata.expression.fn.JDBCCall.calculate(JDBCCall.java:68)
at com.scudata.expression.Expression.calculate(Expression.java:143)
at com.scudata.expression.fn.Eval.calc(Eval.java:88)
at com.esproc.jdbc.JDBCUtil.execute(JDBCUtil.java:418)
at com.esproc.jdbc.InternalStatement.executeJDBC(InternalStatement.java:267)
... 1 more
wunanraq commented
替换了最新版(20220228版本)的jar包,依旧抛出以下错误信息,望请排除,谢谢
java.sql.SQLException: 文件 STUDENT_SCORE_LIST 不存在 at com.esproc.jdbc.InternalStatement.executeJDBC(InternalStatement.java:286) at com.esproc.jdbc.InternalStatement$1.run(InternalStatement.java:148) Caused by: com.scudata.common.RQException: 文件 STUDENT_SCORE_LIST 不存在 at com.scudata.app.common.AppUtil.readCellSet(AppUtil.java:795) at com.scudata.expression.fn.JDBCCall.calculate(JDBCCall.java:68) at com.scudata.expression.Expression.calculate(Expression.java:143) at com.scudata.expression.fn.Eval.calc(Eval.java:88) at com.esproc.jdbc.JDBCUtil.execute(JDBCUtil.java:418) at com.esproc.jdbc.InternalStatement.executeJDBC(InternalStatement.java:267) ... 1 more
您好,已经找到了问题,刚刚修复提交了。请更新代码后重试,谢谢!
FengMingJian commented
已验证,问题已经修复