[SQL] JDBC와 MySQL의를 사용하여 .SQL 스크립트를 실행
SQLJDBC와 MySQL의를 사용하여 .SQL 스크립트를 실행
나는 JDBC와 MySQL을 사용하기 시작하고있다.
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql:///x", "x", "x");
stmt = conn.createStatement();
stmt.execute( "CREATE TABLE amigos" +
"("+
"id int AUTO_INCREMENT not null,"+
"nombre char(20) not null,"+
"primary key(id)" +
")");
내가 만들 수있는 3 ~ 4 개 테이블이 있고이 잘 보이지 않는다.
MySQL의 JDBC에서 .SQL 스크립트를 실행하는 방법이 있나요?
해결법
-
==============================
1.확인. 당신은 당신의 프로젝트에 (때문에 파일의 길이 페이스트 빈에 게시) 여기에이 클래스를 사용할 수 있습니다. 그러나 아파치 라이센스 정보를 유지해야합니다.
확인. 당신은 당신의 프로젝트에 (때문에 파일의 길이 페이스트 빈에 게시) 여기에이 클래스를 사용할 수 있습니다. 그러나 아파치 라이센스 정보를 유지해야합니다.
JDBC ScriptRunner
그것은 제거 의존성으로 iBatis를 ScriptRunner의 해적판.
이처럼 사용할 수 있습니다
Connection con = .... ScriptRunner runner = new ScriptRunner(con, [booleanAutoCommit], [booleanStopOnerror]); runner.runScript(new BufferedReader(new FileReader("test.sql")));
즉입니다!
-
==============================
2.나는이에 대한 연구를 많이했고, 봄부터 UTIL 좋은 발견했다. 나는 더 유지 및 테스트로 SimpleJdbcTestUtils.executeSqlScript이 (...) 실제로 가장 좋은 솔루션입니다 사용하여 생각합니다.
나는이에 대한 연구를 많이했고, 봄부터 UTIL 좋은 발견했다. 나는 더 유지 및 테스트로 SimpleJdbcTestUtils.executeSqlScript이 (...) 실제로 가장 좋은 솔루션입니다 사용하여 생각합니다.
편집 : SimpleJdbcTestUtils이되지 않습니다. 당신은 JdbcTestUtils를 사용해야합니다. 링크를 업데이트했습니다.
-
==============================
3.스프링 프레임 워크의 ResourceDatabasePopulator 도움이 될 수 있습니다. 당신은 당신이 MySQL과 JDBC를 사용 말했듯이, 이제 당신은 MySQL의 백업 데이터 소스 인스턴스를 준비 가정하자. 또한,하자는 MySQL의 스크립트 파일을 클래스 패스-하여 위치 가정합니다. 하자 당신이 WAR 레이아웃을 사용하고 스크립트 파일이 디렉토리 SRC에있는 가정 / 주 / 웹 애플리케이션 / 자원 / mysql을 - 스크립트는 / ... 또는 SRC / 테스트 / 자원 / mysql을 - 스크립트 / .... 그럼 당신은 사용할 수 있습니다 ResourceDatabasePopulator는 다음과 같이 SQL 스크립트를 실행합니다 :
스프링 프레임 워크의 ResourceDatabasePopulator 도움이 될 수 있습니다. 당신은 당신이 MySQL과 JDBC를 사용 말했듯이, 이제 당신은 MySQL의 백업 데이터 소스 인스턴스를 준비 가정하자. 또한,하자는 MySQL의 스크립트 파일을 클래스 패스-하여 위치 가정합니다. 하자 당신이 WAR 레이아웃을 사용하고 스크립트 파일이 디렉토리 SRC에있는 가정 / 주 / 웹 애플리케이션 / 자원 / mysql을 - 스크립트는 / ... 또는 SRC / 테스트 / 자원 / mysql을 - 스크립트 / .... 그럼 당신은 사용할 수 있습니다 ResourceDatabasePopulator는 다음과 같이 SQL 스크립트를 실행합니다 :
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import javax.sql.DataSource; DataSource dataSource = getYourMySQLDriverBackedDataSource(); ResourceDatabasePopulator rdp = new ResourceDatabasePopulator(); rdp.addScript(new ClassPathResource( "mysql-scripts/firstScript.sql")); rdp.addScript(new ClassPathResource( "mysql-scripts/secondScript.sql")); try { Connection connection = dataSource.getConnection(); rdp.populate(connection); // this starts the script execution, in the order as added } catch (SQLException e) { e.printStackTrace(); }
-
==============================
4.에 의해 분할 할 간단한 SQL 스크립트를 들어 ';' 이 간단한 기능을 사용할 수 있습니다. 그것은 하나의 의견과 실행 문 하나를 제거
에 의해 분할 할 간단한 SQL 스크립트를 들어 ';' 이 간단한 기능을 사용할 수 있습니다. 그것은 하나의 의견과 실행 문 하나를 제거
static void executeScript(Connection conn, InputStream in) throws SQLException { Scanner s = new Scanner(in); s.useDelimiter("/\\*[\\s\\S]*?\\*/|--[^\\r\\n]*|;"); Statement st = null; try { st = conn.createStatement(); while (s.hasNext()) { String line = s.next().trim(); if (!line.isEmpty()) st.execute(line); } } finally { if (st != null) st.close(); } }
-
==============================
5.@ Pantelis Sopasakis
@ Pantelis Sopasakis
약간 GitHub의에서 수정 된 버전 : https://gist.github.com/831762/
이 수정을 추적하기 위해 쉽게.
-
==============================
6.(나는 또한 사용하고 있습니다) SQL 스크립트 주자에 대해서, 나는 다음과 같은 코드 조각을 발견 :
(나는 또한 사용하고 있습니다) SQL 스크립트 주자에 대해서, 나는 다음과 같은 코드 조각을 발견 :
for (int i = 0; i < cols; i++) { String value = rs.getString(i); print(value + "\t"); }
그러나이 방법에는 getString (int)에 대한 API 문서에이는가되어야하므로 인덱스는 1로 시작 언급있다 :
for (int i = 1; i <= cols; i++) { String value = rs.getString(i); print(value + "\t"); }
둘째, ScriptRunner의이 구현은 트리거나 절차를 컴파일해야하는 경우 중요 SQL 스크립트에서 DELIMITER 문에 대한 지원을 제공하지 않습니다. 난 당신이 유용 바랍니다 http://pastebin.com/ZrUcDjSx : 나는 ScriptRunner의 수정 된 버전을 만들었습니다 그래서.
-
==============================
7.또 다른 흥미로운 옵션은 스크립트를 실행하는 데 Jisql을 사용하는 것입니다. 소스 코드를 사용할 수 있기 때문에, 애플리케이션에 임베드 할 수 있어야한다.
또 다른 흥미로운 옵션은 스크립트를 실행하는 데 Jisql을 사용하는 것입니다. 소스 코드를 사용할 수 있기 때문에, 애플리케이션에 임베드 할 수 있어야한다.
편집 : 그것을주의 깊게 살펴 보았다; 뭔가 다른 내부를 삽입하는 것은 소스 코드에 약간의 수정을 요구한다.
-
==============================
8.당신은이를 사용할 수 :
당신은이를 사용할 수 :
public static void executeSQL(File f, Connection c) throws Exception { BufferedReader br = new BufferedReader(new FileReader(f)); String sql = "", line; while ((line = br.readLine()) != null) sql += (line+"\n"); c.prepareCall(sql).execute(sql); }
이 기능은 SQL 파일 및 DB 연결을 가져옵니다. 그런 다음 파일을 줄 단위는 java.io에서의 BufferedReader를 사용하여 읽기 그리고 마지막으로, 읽기 문을 실행합니다.
자바 8 이상 버전 :
public static void executeSQL(Path p, Connection c) throws Exception { List<String> lines = Files.readAllLines(p); String s = String.join("\n", lines.toArray(new String[0])); c.prepareCall(s).execute(s); }
-
==============================
9.코드에 쓰기 :
코드에 쓰기 :
-
==============================
10.오라클 PL / SQL은 Oracle JDBC 드라이버는 실제로 볼, 저장 프로 시저 및 익명 블록 (PL / SQL의 특정 표기)를 포함한 전체 SQL-스크립트를 실행 지원
오라클 PL / SQL은 Oracle JDBC 드라이버는 실제로 볼, 저장 프로 시저 및 익명 블록 (PL / SQL의 특정 표기)를 포함한 전체 SQL-스크립트를 실행 지원
는 JDBC 드라이버는 PL / SQL 저장 프로 시저에 액세스 할 수 있습니까?
오라클 JDBC 드라이버 자주 묻는 질문은 더 많은 정보를 가지고 :
// SQL92 syntax CallableStatement cs1 = conn.prepareCall ( "{call proc (?,?)}" ) ; // stored proc CallableStatement cs2 = conn.prepareCall ( "{? = call func (?,?)}" ) ; // stored func // Oracle PL/SQL block syntax CallableStatement cs3 = conn.prepareCall ( "begin proc (?,?); end;" ) ; // stored proc CallableStatement cs4 = conn.prepareCall ( "begin ? := func(?,?); end;" ) ; // stored func
방법 -이 파일에 읽고의 prepareCall ()에 콘텐츠를 공급 할 수 있어야한다.
-
==============================
11.메이븐 SQL 플러그인을 사용하여 SQL 문을 파일 또는 파일 목록을 실행하기 위해이 플러그인
메이븐 SQL 플러그인을 사용하여 SQL 문을 파일 또는 파일 목록을 실행하기 위해이 플러그인
-
==============================
12.이 작업을 수행 할 수있는 방법이 정말 없습니다.
이 작업을 수행 할 수있는 방법이 정말 없습니다.
이 옵션에 대한 결정하면 당신도이 기사를 Runtime.exec의를 통해 (문자열 [])를 MySQL의 명령 행 클라이언트를 실행하고 읽을 수
또는 iBATIS를에서 ScriptRunner (com.ibatis.common.jdbc.ScriptRunner)을 사용해보십시오. 그러나 그것은 단지 스크립트를 실행하기 위해 전체 라이브러리를 포함하는 약간 바보.
from https://stackoverflow.com/questions/1044194/running-a-sql-script-using-mysql-with-jdbc by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은 "그룹으로"와 "주문" (0) | 2020.03.25 |
---|---|
[SQL] 당신은 어떻게 psql의에서 스크립트 변수를 사용합니까? (0) | 2020.03.25 |
[SQL] SQL 대소 문자 구분 문자열 비교 (0) | 2020.03.25 |
[SQL] MySQL은 - 하나 개의 쿼리에서 다른 값으로 UPDATE 여러 행 (0) | 2020.03.25 |
[SQL] 두 점 사이의 거리를 계산 (위도, 경도) (0) | 2020.03.25 |