Postgresql psql
명령을 실행하기 위해 ProcessBuilder를 사용하고 있습니다. 하지만 암호를 줄 수는 없지만 매개 변수를 전달해야 암호를 입력하라는 메시지가 나타납니다. ProcessBuilder를 사용하여이 대화 형 매개 변수를 전달하려면 어떻게해야합니까?대화 형 명령에 ProcessBuilder를 사용하는 방법은 무엇입니까?
답변
질문 제목은 ProcessBuilder에 대한 일반적인 질문이지만, OP에는 구체적으로 psql
이 나와 있기 때문에 더 잘 작동하는 특정 솔루션이 있으며 프로세스 출력을 읽고 응답 할 필요가 없습니다.
그러나 염두에 두어야 할 문제는 ps
명령을 사용하여 (적어도 유닉스에서) 발견 될 수 있기 때문에 명령 줄이나 환경 변수에서 암호를 전달하는 것이 완전히 안전하지 않다는 것입니다.
해결 방법 1 :이 pass the password in the PGPASSWORD
environment variable의 옵션이지만 기계의 다른 사용자가 볼 수있는이 권장되지 않습니다 .
해결 방법 2 :가 (권장) 이 생각보다 안전한 옵션이며, 그것은 당신이 psql
프로그램을 실행하려고하는 사용자의 계정에 암호를 포함 create a .pgpass
or pgpass.conf
file이다.
파일은 다음 형식 라인을 포함해야합니다 : 자세한 내용은 PostgreSQL의 문서에 대한 위의 텍스트
hostname:port:database:username:password
내가 추가 한 링크를.
또한이 pgpass.conf
파일이 환경 변수 PGPASSFILE
을 사용하여 디스크에있는 위치를 알 수 있으며 psql
을 호출하기 전에 Java에서이 파일을 쓸 수 있습니다. -http :
String hostname = "...";
int port = 5432;
String database = "...";
String username = "...";
String password = "...";
File file = File.createTempFile("pgpass", "conf");
// TODO: ensure file permissions are correct
try (Writer w = new FileWriter(file)) {
w.write(String.format("%s:%d:%s:%s:%s\n", hostname, port, database, username, password));
}
ProcessBuilder processBuilder = new ProcessBuilder("psql"); // add other options to psql to the argument list
processBuilder.environment().put("PGPASSFILE", file.getAbsolutePath());
processBuilder.start();
답변 해 주셔서 감사합니다.하지만 50 개 이상의 클라이언트에서 실행되는 응용 프로그램을 개발하고자하며 postgresql 환경이 어떻게되는지 알지 못합니다. 암호와 다른 인수를 사용자로부터 매개 변수로 가져옵니다. – Obtice
Windows 또는 Unix를 실행하고 있습니까? (또는 다른 무엇입니까?) –
두 번째 질문 : 왜 psql을 구체적으로 시작해야합니까? postgresql JDBC 드라이버를 사용하여 데이터베이스에 대해 명령을 실행할 수도 있습니다. –
- 1. viewActions를 명령에 사용하는 방법은 무엇입니까?
- 2. processBuilder를 사용하는 Java/python
- 3. 대화 형 ssh 로그인을 방지하는 방법은 무엇입니까?
- 4. ruby 대화 형 콘솔에서 json을 사용하는 방법은 무엇입니까?
- 5. bbr 스크립트에서 pbrun을 사용하는 방법은 무엇입니까? 대화 형 모드에서
- 6. ppt를 사용하는 대화 형 퀴즈
- 7. Datanitro를 사용하는 대화 형 시트
- 8. Igraph를 사용하는 대화 형 UI
- 9. 대화 형 Facebook 페이지를 만드는 방법은 무엇입니까?
- 10. 대화 형 Bokeh 히스토그램을 만드는 방법은 무엇입니까?
- 11. 대화 형 USSD 메뉴를 만드는 방법은 무엇입니까?
- 12. 그래픽 대화 형 애플릿을 작성하는 방법은 무엇입니까?
- 13. PhysicsJS에서 대화 형 및 비대화 형 객체를 설정하는 방법은 무엇입니까?
- 14. R 대화 형 플롯?
- 15. 대화 형 배치 파일
- 16. wxPython을 사용하여 대화 형 대화 상자를 생성하는 방법은 무엇입니까?
- 17. 대화 상자의 열거 형
- 18. 대화 형 애니메이션 전환을 사용하는 TabBarController
- 19. switch 문을 사용하는 대화 형 메뉴
- 20. Java : jTextArea를 사용하는 대화 형 콘솔
- 21. LFS를 사용하는 TFS 대화 형 빌드 봇
- 22. 팬 제스처를 사용하는 대화 형 viewController
- 23. 대화 형 셸 개발
- 24. 대화 형 PDF 리더 : Android
- 25. 자이 썬 대화 형 인터프리터 세션에서 JLine을 비활성화하는 방법은 무엇입니까?
- 26. 대화 형 프로그램의 출력을 파일로 리디렉션하는 방법은 무엇입니까?
- 27. Fsharp 대화 형 쿵푸
- 28. 대화 형 로그온 권한을 가진 사용자를 관리하는 방법은 무엇입니까?
- 29. egg/Emacs에서 대화 형 git rebase를 수행하는 방법은 무엇입니까?
- 30. 대화 형 활동
이 시도 :
이 조각은 어떻게
ProcessBuilder
으로 그렇게하는 당신에게 아이디어를 줄 것이다 //stackoverflow.com/questions/3468987/executing-another-application-from-java – Divya'yourProcessBuilder.start()'를 호출하면, 그것은'Process' 객체를 리턴 할 것입니다. 'Process'는'getOutputStream()'과'getInputStream()'메소드를 가지고 있습니다.이 메소드를 사용하여 프로세스를 읽고 쓸 수 있습니다. – BackSlash
@BackSlash 좀 더 설명해 주시겠습니까? – Obtice