java - 如何从 Java 程序中检索 db2 命令输出

标签 java command-line db2

我无法在 Java 程序中检索 “db2 list db directory” 命令的输出。基本上,我想做的是:-

  1. 组合框填充了本地系统中的 db2 实例
  2. 用户从组合框中选择特定实例
  3. 运行一个新进程来列出该实例的数据库
  4. 将数据库显示为另一个组合框

这是我完成的代码:-

// dbinstances is a Combo box (Eclipse SWT widget)

this.dbInstances.addSelectionListener(new SelectionListener() {

    @Override
    public void widgetSelected(SelectionEvent arg0) {

        // get selected instance name 
        String instance = dbInstances.getText();

        // command invokes db2 command window, sets current instance and issues list db command
        String command = "db2cmd /c \"set DB2INSTANCE="+instance+" & db2 list db directory\""; 

        // execute command and read output
        try{
            Process p = Runtime.getRuntime().exec(command);
            BufferedReader br= new BufferedReader(new InputStreamReader(p.getInputStream()));
            String op = null;
            while((op=br.readLine())!=null){
                System.out.println(op);
            }
        }
        catch(IOException ioe){
             ioe.printStackTrace();
         }
     }

      public void widgetDefaultSelected(SelectionEvent arg0) {}
});

问题是命令执行时,我无法检索输出。窗口只是打开和关闭。

我尝试的一个解决方案是将输出重定向到临时文件并读取它。它可以工作,但效率很低,因为每次用户选择实例时都会运行这段代码。

我在 Windows XP SP3 机器上运行 DB2 9.7 Enterprise 版本。

关于如何检索 Java 程序中的输出有什么想法吗?

提前非常感谢。

最佳答案

您还可以通过 JNI 使用 DB2 API 来检索数据库列表目录。您必须开始扫描,获取条目,然后关闭扫描。

通过这样做,您可以以更好的方式控制数据库列表,从而解析可能因多种原因而变化的输出(HADR、身份验证机制、本地或远程、有或没有别名、IP 地址或服务器名称、服务名称或端口号,在 Linux(主目录)或 Windows(驱动器号)中,以及其他内容) DB2 API 在所有平台上都是相同的,因此它几乎是平台无关的,您只需要知道加载哪个库(.so 或 .dll)即可,其余的都是相同的。

欲了解更多信息,请查看: db2DbDirOpenScan http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.api.doc/doc/r0001509.html db2DbDirGetNextEntry http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.api.doc/doc/r0001492.html db2DbDirCloseScan http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.api.doc/doc/r0001437.html

关于java - 如何从 Java 程序中检索 db2 命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9579817/

相关文章:

java - 转换为ArrayList

java - 连接被拒绝 : connect in jhipster

python - 也可以作为命令行脚本运行的包结构

c++ - 在窗口中嵌入命令行?

plsql - 开发工具,例如 PL/SQL Developer for IBM DB2 for i (iSeries)

db2 - 如何获取转储db2数据库?

java - 如何测试 Google App Engine 的数据库实现?

java - 如何将certificate_authorities添加到TLSv1.3中的CertificateRequest消息中

windows - 从“运行”对话框启动时,CMD 编码错误

java - 当类型仅向前时,如何获取 Java 中记录集的大小?