如何通过JT400 Java库获取Query/400查询列表?
获取Query/400查询列表的JT400实现方案
一、先明确Query/400的存储本质
Query/400创建的查询是以QRYDFN(Query Definition)对象的形式存储在IBM i系统的库中的,不是普通文件或程序。你之前用ObjectList没拿到预期结果,核心原因是没指定正确的对象类型。
二、JT400代码实现示例
直接用QSYSObjectList筛选QRYDFN类型对象,以下是可运行的代码片段:
import com.ibm.as400.access.AS400; import com.ibm.as400.access.QSYSObjectList; import com.ibm.as400.access.ObjectListEntry; public class Query400Lister { public static void main(String[] args) { // 替换为你的IBM i系统信息 String system = "你的AS400地址"; String user = "用户名"; String pwd = "密码"; String targetLib = "*ALL"; // 可替换为具体库名,比如QGPL或业务库 try (AS400 as400 = new AS400(system, user, pwd)) { // 构建对象列表:指定库、对象名通配符、对象类型QRYDFN QSYSObjectList objList = new QSYSObjectList(as400, targetLib, "*ALL", "QRYDFN"); // 遍历输出查询信息 while (objList.hasNext()) { ObjectListEntry entry = (ObjectListEntry) objList.next(); String lib = entry.getStringValue(QSYSObjectList.LIBRARY); String queryName = entry.getStringValue(QSYSObjectList.NAME); System.out.printf("查询:%s | 所在库:%s%n", queryName, lib); } } catch (Exception e) { e.printStackTrace(); } } }
三、关键注意事项
- 若终端里的查询集中在某个特定库,把
targetLib从*ALL改成对应库名,能大幅提升检索效率。 - 关于IBM Query400 Discovery工具:这个工具是用来分析查询依赖、优化性能的,完全不需要它就能获取查询列表,不用纠结是否安装。
- 你可以在终端执行
WRKOBJ OBJ(*ALL/QRYDFN)命令,验证系统里的QRYDFN对象是否和终端显示的查询列表一致。
四、排查常见问题
如果返回结果为空,检查这几点:
- 当前用户是否有目标库的读取权限
- 是否指定了正确的库(终端里的查询可能存放在业务专属库,而非*ALL)
- 对象类型是否准确(必须是
QRYDFN,别写成QRY或其他)
内容的提问来源于stack exchange,提问作者Logan Price
相关产品推荐
相关产品推荐

