gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:56:17 25 4
gpt4 key购买 nike

我无法在 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.htmldb2DbDirGetNextEntry http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.api.doc/doc/r0001492.htmldb2DbDirCloseScan 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com