从 java 程序中读取 MVS DataSet
Posted
技术标签:
【中文标题】从 java 程序中读取 MVS DataSet【英文标题】:Read MVS DataSet from java program 【发布时间】:2020-09-14 08:02:58 【问题描述】:我正在尝试访问一个名为 X.Y.Z 的数据集; 我的代码是:
ZFile zFile = new ZFile("//X.Y.Z","r");
try
String enc = ZUtil.getDefaultPlatformEncoding();
InputStream is = zFile.getInputStream();
BufferedReader rdr = new BufferedReader(new InputStreamReader(is, enc));
String line;
while ((line = rdr.readLine()) != null)
System.out.println(line);
;
finally
zFile.close();
我得到了这个例外:
com.ibm.jzos.ZFileException: X.Y.Z: Filename is not a valid MVS dataset or DD name; errno=99 errno2=0x0 last_op=0 errorCode=0x0
at com.ibm.jzos.ZFile.checkSecurityManager(ZFile.java:1592)
at com.ibm.jzos.ZFile.<init>(ZFile.java:475)
at it.Main.test(MainApp.java:20)
com.ibm.jzos.ZFileException: //'X.Y.Z': fopen() failed; EDC5049I The specified file name could not be located.; errno=49 errno2=0xc00b0641 last_op=50 errorCode=0x21708
at com.ibm.jzos.ZFile.fopen(Native Method)
at com.ibm.jzos.ZFile.doZFileOpen(ZFile.java:613)
at com.ibm.jzos.ZFile.<init>(ZFile.java:476)
at it.Main.test(MainApp.java:22)
有什么建议吗?谢谢。
【问题讨论】:
为什么不通过 JCL 定义 DD,并在您的代码中指定 DD?你为什么为这个问题标记db2
?
我不能使用 DD,因为我没有用 JCL 调用这个程序;我已将此 jar 作为外部存储过程安装在 db2 中。
异常似乎很明显,'TSTCWLMY.L065291.SUN.JAVALOG'
is not found...(对于不存在的数据集,您不能使用读取模式)。
问题是文件存在且名称正确;会不会是权限问题?
如果X
是高级限定符,请尝试使用"//'X.Y.Z'"
。
【参考方案1】:
如果在 z/OS 上使用双斜杠表示法来指代数据集,则假定数据集的高级限定符 (HLQ) 是当前用户的用户 ID。例如,//X.Y.Z
将解析为 MEAT.X.Y.Z
,假设我的用户名是我在 z/OS 上的用户 ID。如果指定的数据集是完全限定的数据集名称,则应添加引号。在您的情况下,//'X.Y.Z'
将解析为 X.Y.Z
。
【讨论】:
以上是关于从 java 程序中读取 MVS DataSet的主要内容,如果未能解决你的问题,请参考以下文章
应该使用啥代码页/字符集将来自 MVS 系统的数据解释为 Java 环境?