You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:59:53