//要执行的DOS命令 --数据库 用户名 密码 user/password@database
String dos="sqlldr "+user+"/"+psw+"@"+Database+" control="+fileRoute+""+ctlfileName+" log="+fileRoute+""+logfileName;
String[] cmd = new String[]
{ "cmd.exe", "/C", dos }; // 命令
try
{
Process process = Runtime.getRuntime().exec(cmd);
ins = process.getInputStream(); // 获取执行cmd命令后的信息
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String line = null;
while ((line = reader.readLine()) != null)
{
String msg = new String(line.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(msg); // 输出
}
int exitValue = process.waitFor();
if(exitValue==0)
{
System.out.println("返回值:" + exitValue+"\n数据导入成功");
}else
{
System.out.println("返回值:" + exitValue+"\n数据导入失败");
}
process.getOutputStream().close(); // 关闭
其中那个process.waitfor()方法每次都返回2,但是数据插入数据库成功。
插入失败时返回1。
请问返回值总是2是什么原因?
不能通过exitValue 来判断结果。
需要通过获取process的输出流,根据一个while循环判断console中的内容来做处理。
对util.getStdoutList(),util.getErroroutList()的内容进行判断。
http://blog.csdn.net/sinat_16741503/article/details/78969936
public static void test(String str) {
CommandUtil util = new CommandUtil();
util.executeCommand(str);
printList(util.getStdoutList());
System.out.println("--------------------");
printList(util.getErroroutList());
}
public static void printList(List list){
for (String string : list) {
System.out.println(string);
}
}