모든 파일 내용을 큰 쿼리로 읽고 실행하지 않고 Java에서 SQL 스크립트 파일을 실행하려고합니다. 표준 방법이 있습니까?java에서 sql-script 파일을 실행하는 방법은 무엇입니까?
답변
이식성있는 방법이 없습니다.
import java.io.*;
public class CmdExec {
public static void main(String argv[]) {
try {
String line;
Process p = Runtime.getRuntime().exec
("psql -U username -d dbname -h serverhost -f scripfile.sql");
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
}
catch (Exception err) {
err.printStackTrace();
}
}
}
- 코드 샘플 here에서 추출하여 사용자가 PostgreSQL의 스크립트 파일을 실행하기를 원하는 가정 질문에 대한 답을 수정 : 당신은 비록 그렇게하기 위해 외부 프로그램으로 네이티브 클라이언트를 실행할 수 있습니다.
아니요, 파일을 읽고 별도의 쿼리로 분할 한 다음 개별적으로 (또는 JDBC의 일괄 API를 사용하여) 실행해야합니다.
이유 중 하나는 모든 데이터베이스가 SQL 문을 분리하는 고유 한 방법을 정의한다는 것입니다 (일부는 ;
, 다른 하나는 /
이고 일부는 사용자 고유의 구분 기호를 정의 할 수 있습니다).
JDBC는이 옵션을 지원하지 않습니다 (특정 DB 드라이버가이를 제공 할 수도 있음). 어쨌든 모든 파일 내용을 메모리로로드하는 데는 문제가 없어야합니다.
JDBC는 지원하지 않으므로 사용할 수 없습니다. iBATIS를 포함하는 작업은 지속성 프레임 워크이며 Scriptrunner
생성자를 iBatis 문서에 표시된대로 호출하십시오. 간단한 SQL 스크립트를 자바에서 SQL 스크립트를 실행하는 가장 좋은 방법은이 명령 줄
$ mysql -u root -p db_name < test.sql
을 사용하여 할 수있는 모든 방법을 실행하기 위해 iBATIS를 같은 무거운 무게 지속성 프레임 워크를 포함
그것 좋지 않다 개미에 의존하지 않는 한 직접 읽지 않아도됩니다. 제 의견으로는 그러한 의존성이 당신의 경우에 매우 정당합니다.
private void executeSql(String sqlFilePath) {
final class SqlExecuter extends SQLExec {
public SqlExecuter() {
Project project = new Project();
project.init();
setProject(project);
setTaskType("sql");
setTaskName("sql");
}
}
SqlExecuter executer = new SqlExecuter();
executer.setSrc(new File(sqlFilePath));
executer.setDriver(args.getDriver());
executer.setPassword(args.getPwd());
executer.setUserid(args.getUser());
executer.setUrl(args.getUrl());
executer.execute();
}
필자는 오라클 SQL 스크립트 몇 개를 시도해 보았습니다.이 스크립트는'insert','create table'에서 작동합니다. 하지만'create or replace trigger '를 가진 스크립트의 경우 ** java.sql.SQLSyntaxErrorException로 실패합니다. ORA-00900 : SQL 문이 잘못되었습니다 ** –
구분 기호를 고려해야합니다 – carpinchosaurio
이 코드를보십시오 : 여기 SQLEXEC 클래스는 ant.jar에 살고있는 샘플 코드입니다
String strProc =
"DECLARE \n" +
" sys_date DATE;"+
"" +
"BEGIN\n" +
"" +
" SELECT SYSDATE INTO sys_date FROM dual;\n" +
"" +
"END;\n";
try{
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
Connection connection = DriverManager.getConnection ("jdbc:oracle:thin:@your_db_IP:1521:your_db_SID","user","password");
PreparedStatement psProcToexecute = connection.prepareStatement(strProc);
psProcToexecute.execute();
}catch (Exception e) {
System.out.println(e.toString());
}
예제가 지나치게 단순합니다. 'Statement'는 보통 한 번에 하나의 SQL 문만 실행할 수 있습니다. 질문은 많은 수의 쿼리 또는 삽입이 필요하다는 것을 의미하므로 분리 기호를 찾아 개별 구문으로 분리해야합니다. – BoffinbraiN
동의합니다.이 솔루션은 다중 명령문 스크립트에서 작동하지 않습니다. 아래에 제안 된대로 jisql을 사용하십시오. –
JDBC이 옵션을 명령을 실행하고이 문제를 해결하는 가장 좋은 방법을 지원하지 않기 때문에 자바 프로그램을 통해 벨로는 PostgreSQL을에 예입니다
private void executeSqlFile() {
try {
Runtime rt = Runtime.getRuntime();
String executeSqlCommand = "psql -U (user) -h (domain) -f (script_name) (dbName)";
Process pr = rt.exec();
int exitVal = pr.waitFor();
System.out.println("Exited with error code " + exitVal);
} catch (Exception e) {
System.out.println(e.toString());
}
}
아래의 튜토리얼은 sql
을 실행하는 데 도움이됩니다.
http://www.mkyong.com/jdbc/how-to-run-a-mysql-script-using-java/
이동 경로 라이브러리는이 정말 좋다 :
Flyway flyway = new Flyway();
flyway.setDataSource(dbConfig.getUrl(), dbConfig.getUsername(), dbConfig.getPassword());
flyway.setLocations("classpath:db/scripts");
flyway.clean();
flyway.migrate();
이 스크립트의 위치를 검색 한 순서대로 실행됩니다. V01__name.sql을 사용하여 스크립트를 버전화할 수 있으므로 마이그레이션이 호출 된 경우 아직 실행되지 않은 스크립트 만 실행됩니다. 'schema_version'이라는 테이블을 사용하여 사물을 추적합니다. 그러나 다른 것들도 할 수 있습니다, 문서를 참조하십시오 : flyway.
클린 호출은 필요하지 않지만 클린 DB에서 시작하는 것이 좋습니다. 또한 위치를 알고 있어야합니다 (기본값은 "classpath : db/migration"). ':'다음에 공백이 없어서 저를 잡았습니다.
이동식으로 가장 단순한 외부 도구는 jisql - https://www.xigole.com/software/jisql/jisql.jsp입니다.
java -classpath lib/jisql.jar:\
lib/jopt-simple-3.2.jar:\
lib/javacsv.jar:\
/home/scott/postgresql/postgresql-8.4-701.jdbc4.jar
com.xigole.util.sql.Jisql -user scott -password blah \
-driver postgresql \
-cstring jdbc:postgresql://localhost:5432/scott -c \; \
-query "select * from test;"
'java -classpath lib/jisql-2.0.11.jar을 사용했습니다 : lib/jopt-simple-3.2.jar : lib/javacsv.jar : ../ ojdbc7.jar com.xigole.util.sql.Jisql -user ecm -password TODO -driver oracle.jdbc.OracleDriver -cstring jdbc : oracle : thin : @localhost : 1521 : XE -c \; -input myoracle.sql' 그리고 완벽하게 작동했습니다. –
- 1. Java에서 배치 파일을 실행하는 방법은 무엇입니까?
- 2. Java에서 배치 파일을 실행하는 방법은 무엇입니까?
- 3. Java에서 .reg 파일을 실행하는 방법
- 4. Windows 서비스에서 java에서 .bat 파일을 올바르게 실행하는 방법은 무엇입니까?
- 5. Java에서 스레드를 실행하는 가장 좋은 방법은 무엇입니까?
- 6. Java에서 종속 클래스 파일을 실행하는 방법
- 7. Java에서 3gp 파일을 재생하는 방법은 무엇입니까?
- 8. Java에서 특정 디렉토리의 파일을 반복하는 방법은 무엇입니까?
- 9. Java에서 .plist 파일을 구문 분석하는 방법은 무엇입니까?
- 10. java에서 다른 디렉토리의 파일을 검사하는 방법은 무엇입니까?
- 11. Java에서 기존 파일을 압축하는 간단한 방법은 무엇입니까?
- 12. setup exe 파일을 자체적으로 실행하는 방법은 무엇입니까?
- 13. Netbeans에서 프로젝트리스 파일을 컴파일하고 실행하는 방법은 무엇입니까?
- 14. Delphi에서 데이터베이스 스크립트 파일을 실행하는 방법은 무엇입니까?
- 15. nant 스크립트에서 PHP 파일을 실행하는 방법은 무엇입니까?
- 16. 파일을 쉘 스크립트로 만들고 실행하는 방법은 무엇입니까?
- 17. flex 프로젝트에서 .swc 파일을 실행하는 방법은 무엇입니까?
- 18. 실행 파일을 시스템 서비스로 실행하는 방법은 무엇입니까?
- 19. RHEL5에서 jar 파일을 실행하는 방법은 무엇입니까?
- 20. AppDomain에서 실행 파일을 실행하는 방법은 무엇입니까?
- 21. PHP에서 .sh 파일을 실행하는 방법은 무엇입니까?
- 22. 파일을 만든 후 코드를 실행하는 방법은 무엇입니까?
- 23. C# 프로그램에서 박쥐 파일을 실행하는 방법은 무엇입니까?
- 24. 마이크로에서 .jar 파일을 실행하는 방법은 무엇입니까?
- 25. 성공적인 설치 후 파일을 실행하는 방법은 무엇입니까?
- 26. ProcessStartInfo를 사용하여 배치 파일을 실행하는 방법은 무엇입니까?
- 27. 터미널을 사용하여 .command 파일을 실행하는 방법은 무엇입니까?
- 28. 웹 페이지에서 BATCH 파일을 실행하는 방법은 무엇입니까?
- 29. HTML에서 윈도우 배치 파일을 실행하는 방법은 무엇입니까?
- 30. 설치하는 동안 ".bat"파일을 실행하는 방법은 무엇입니까?
iBATIS는이 작업에 대한 좋은 소리 :로 당신은 그것을 실행하는 것입니다! – felipecrp