2013-06-17 3 views
0

을 사용하여 런타임에 java에서 sql 문을 java에서 실행합니다. 루프가 실행되지 않는 동안 아래 코드가 있습니다. 누군가이 코드를 잘못 이해할 수 있습니까?Runtime.getRuntime(). exec()

import java.io.*; 

public class A 
{ 
    public static void main(String args[]) { 
     int value = 0; 
     String sql = "SELECT * FROM A2A_TP_INFO"; 
     String filename="file.txt"; 
     String filepath="/home/mit"+"export/file.txt"; 
     String exportQuery = "/home/mit/JavaProj/proj/export/query"; 
     String cmd[] = { 
      "/bin/ksh", 
      "-c", 
      "" + exportQuery + " " +filepath+ " \"" 
      + sql + ";\" " 
     }; 

     try { 
      //Process p = Runtime.getRuntime().exec(cmd); 
      Process p1=Runtime.getRuntime().exec(sql); 
      // p.waitFor(); 
      BufferedReader input = new BufferedReader(new InputStreamReader(
       p1.getInputStream())); 

      while ((value = input.read()) != -1) { 
       char c = (char) value; 
       System.out.println(c); 
      } 
      input.close(); 
     } catch (Exception exp) { 
      exp.printStackTrace(); 
     } 
    } 
} 
+2

1. 질문은 무엇입니까? 2. 오류가 무엇입니까? : O –

+0

Runtime.exec()를 사용하지 말고,'ProcessBuilder'를 사용하십시오! – fge

답변

0

중개 셸을 사용하지 마십시오. ProcessBuilder을 사용하면 당신은/열려진 파일에 표준 출력을 보내, 심지어 표준 입력을 사용자 정의 할 수

final List<String> fullCommand = Arrays.asList(exportQuery, filePath, sql + ';') 
final ProcessBuilder builder = new ProcessBuilder(fullCommand); 
final Process p = builder.start(); 

참고 : 그리고 ProcessBuilder를 사용합니다. 작업 디렉토리를 설정하고 환경을 사용자 정의 할 수 있습니다. 정말. Runtime.exec()는 더 이상 사용할 이유가 없습니다.

+0

asList()는 단 하나의 매개 변수를 취하고 거기에 cmd를 둡니다. 그러나 결과는 여전히 while while while while loop가 아닙니다. – myst552

+0

어, 아니요, asList()는 많은 매개 변수를 사용할 수 있습니다. 그것은 varargs 방법입니다! – fge

+0

"while loop in not loop"에 관해서는,'ProcessBuilder'를 사용하지 마십시오. stdout/stderr을 파일로 재지 정한 다음 나중에 해당 파일에서 읽습니다. javadoc를 참조하십시오. – fge

관련 문제