【发布时间】:2026-01-30 01:05:02
【问题描述】:
我正在尝试从 java 运行 sql 脚本(此处为 memo_222dataFERG.out)并尝试从 sqlplus 窗口捕获输出。这是我的代码
Runtime rt = Runtime.getRuntime();
String runString1 = "cmd /c start sqlplus pecok/pecok@xe @C:\workspace\PeCok_Tool\memo_222dataFERG.out";
Process proc = null;
proc = rt.exec(runString1);
// proc = rt.exec("java -version");
InputStream is = proc.getErrorStream();
//InputStream is = proc.getInputStream();
int bufSize = 4096;
BufferedReader in = new BufferedReader(new InputStreamReader(is), bufSize);
String currentLine = null;
while ((currentLine = in.readLine()) != null) {
System.out.println(" " + currentLine);
}
is.close();
int a = proc.waitFor();
System.out.println(" proc.waitFor() :: " +a);
Sqlplus 执行。 SQLPlus 窗口打开并开始执行我在 C:\workspace\PeCok_Tool\memo_222dataFERG.out 文件中编写的插入语句。但我无法从 sqlplus 窗口捕获输出并在 Eclipse 控制台中打印。在 while 循环中的某个地方它挂起并且没有在 Eclipse 控制台中打印任何内容。但是当我运行 "java -version"(在代码中注释)时,它成功地将 java 版本打印为控制台中的输出。现在我的问题是如何读取 sqlplus 窗口的输出?我尝试了 getErrorStream() 和 getInputStream()。
【问题讨论】:
-
如果直接从命令提示符运行命令会发生什么?您的脚本是否以“exit”结尾?
-
不...脚本中没有退出。
-
好吧,这是你的问题;如果您不退出,则 SQL*Plus 会坐在那里等待更多输入。 See this.
-
谢谢亚历克斯。我把退出放在脚本中。现在它工作正常。