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 파일을 실행 로그인 할 수있는 옵션이있다 그러나 내가 만들고 싶어 그것은 대화 형
예를하지만, '인쇄 달려 있습니다 사용자 이름을 입력 :' – Saravana
@Saravana 보안을 위해 많은 도구는 표준 입력에서 암호를 읽을 수 있지만 첨부 된 청각 장애에서 대신하지 않습니다. 이것이 SQL * Plus의 경우인지는 모르지만 다음과 같이 보입니다 ... –
CMD에서 암호를 읽는 것을 원하지 않습니다.'sqlplus USER/PASSWORD @ INSTANCE'를 실행하여 SQLPLUS에 한 줄만 로그인하면 로그인 후에'SQL> 프롬프트가 표시됩니다. 여기에 있습니다. 일부 SQL 파일 실행 – Saravana