2015-01-19 4 views
3

ProcessBuilder를 사용하여 CMD 프롬프트를 시작하는 java 프로그램을 작성했습니다. & SQLPLUS를 연결하여 일부 SQL 파일을 실행합니다. 콘솔에서Java ProcessBuilder를 사용하여 CMD 프롬프트에서 SQL 파일을 실행하는 방법

public class OracleConnect { 

    public static void main(String[] args) throws IOException { 
     String[] cmd = new String[] { "sqlplus", "<USER>/<PASSWORD>@<INSTANCE>" }; 
     ProcessBuilder builder = new ProcessBuilder(cmd); 
     Process process = builder.start(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); 
     new ReadFromConsole(br).start(); 
     new WriteToConsole(bw).start(); 
    } 
} 

class AbsThread extends Thread { 
    boolean read = true; 
    boolean write = false; 
} 

class ReadFromConsole extends AbsThread { 

    BufferedReader processOut; 

    public ReadFromConsole(BufferedReader processOut) { 
     this.processOut = processOut; 
    } 

    @Override 
    public void run() { 
     while (read) { 
      int i = -1; 
      try { 
       while ((i = processOut.read()) != -1) { 
        char ch = (char) i; 
        System.out.print(ch); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      write = true; 
      read = false; 
     } 
    } 

} 

class WriteToConsole extends AbsThread { 

    BufferedWriter processIn; 

    public WriteToConsole(BufferedWriter processIn) { 
     this.processIn = processIn; 
    } 

    @Override 
    public void run() { 
     while (write) { 
      System.out.print("Enter command "); 
      String cmd = new Scanner(System.in).nextLine(); 
      try { 
       processIn.write(cmd); 
       processIn.flush(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      read = true; 
      write = false; 
     } 
    } 
} 

출력 :

의 SQL * 플러스 : 2015 월 1월 19일 14시 7분 53초에 11.2.0.3.0 생산을 해제

저작권 (C) 1982, 2011, 신탁. 판권 소유.

에 연결 : 오라클 데이터베이스 11g 엔터프라이즈 에디션 출시 11.2.0.3.0 - 파티셔닝을 통해 64 비트 생산, 오라클 라벨 보안, OLAP, 데이터 마이닝 및 실제 응용 프로그램 테스트 옵션

SQL>

프로그램이 BLINK_CHARACTER를 읽는 중 멈추었습니다. read()와 readLine()을 모두 시도했지만 BLINK_CHARACTER를 읽지 않습니다.

만약 내가 할 설명서, 점점 프롬프트 CMD에서 응답

C 다음> SQLPLUS 사용자/INSTANCE @ PASSWORD

SQL * 플러스 : 월 1월 19일 12 11.2.0.3.0 생산 릴리스 : 29 : 44 2015

Copyright (c) 1982, 2011, Oracle. 판권 소유.

에 연결 : 오라클 데이터베이스 11g 엔터프라이즈 에디션 출시 11.2.0.3.0 - 파티셔닝을 통해 64 비트 생산, 오라클 라벨 보안, OLAP, 데이터 마이닝 및 실제 응용 프로그램 테스트 옵션

SQL> _ [BLINK_CHARACTER]

런타임시 사용자 이름과 암호를 제공하여 대화식으로 만드는 방법은 무엇입니까? 또한 Informatica 프로세스에 대해 동일한 종류의 대화식 CMD 프롬프트를 구현해야합니다.

PS :이 &가 SQLPLUS에서 하나의 명령 자체가 SQL 파일을 실행 로그인 할 수있는 옵션이있다 그러나 내가 만들고 싶어 그것은 대화 형

답변

1

당신은 사용자 이름/암호 및 연결 문자열, SQL에서 @ 문자를 제거하는 경우

sqlplus <INSTANCE> 

SQL의 *를 플러스 : * Plus는 사용자 이름/암호를 입력하라는 메시지가 표시됩니다 11.2.0.0.0 해제 - 19 14시 7분 53초 2015
(C) 저작권 1982 2008 년 월 월에 생산을 오라클 (Oracle Corporation). 판권 소유.
사용자 이름 입력 :

+0

예를하지만, '인쇄 달려 있습니다 사용자 이름을 입력 :' – Saravana

+0

@Saravana 보안을 위해 많은 도구는 표준 입력에서 암호를 읽을 수 있지만 첨부 된 청각 장애에서 대신하지 않습니다. 이것이 SQL * Plus의 경우인지는 모르지만 다음과 같이 보입니다 ... –

+0

CMD에서 암호를 읽는 것을 원하지 않습니다.'sqlplus USER/PASSWORD @ INSTANCE'를 실행하여 SQLPLUS에 한 줄만 로그인하면 로그인 후에'SQL> 프롬프트가 표시됩니다. 여기에 있습니다. 일부 SQL 파일 실행 – Saravana