我无法在Java程序中检索"db2 list db directory"
命令的输出。基本上,我想要做的是: -
这是我所做的一段代码: -
// 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 Edition。
有关如何在Java程序中检索输出的任何想法吗?
提前多多感谢。
答案 0 :(得分:1)
好的,想出这个。所需的解决方案是添加/ w和/ i切换到命令: -
// command invokes db2 command window, sets current instance and issues list db command
String command = "db2cmd /c /w /i \"set DB2INSTANCE="+instance+" & db2 list db directory\"";
// Additional information about db2cmd Options
-c Execute the DB2 command window and terminate.
-w Wait until the DB2 command window terminates.
-i Inherit the environment from the invoking shell.
-t Inherit the title from the invoking shell
答案 1 :(得分:1)
您还可以通过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