복붙노트

[SQL] JDBC와 MySQL의를 사용하여 .SQL 스크립트를 실행

SQL

JDBC와 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. ==============================

    1.확인. 당신은 당신의 프로젝트에 (때문에 파일의 길이 페이스트 빈에 게시) 여기에이 클래스를 사용할 수 있습니다. 그러나 아파치 라이센스 정보를 유지해야합니다.

    확인. 당신은 당신의 프로젝트에 (때문에 파일의 길이 페이스트 빈에 게시) 여기에이 클래스를 사용할 수 있습니다. 그러나 아파치 라이센스 정보를 유지해야합니다.

    JDBC ScriptRunner

    그것은 제거 의존성으로 iBatis를 ScriptRunner의 해적판.

    이처럼 사용할 수 있습니다

    Connection con = ....
    ScriptRunner runner = new ScriptRunner(con, [booleanAutoCommit], [booleanStopOnerror]);
    runner.runScript(new BufferedReader(new FileReader("test.sql")));
    

    즉입니다!

  2. ==============================

    2.나는이에 대한 연구를 많이했고, 봄부터 UTIL 좋은 발견했다. 나는 더 유지 및 테스트로 SimpleJdbcTestUtils.executeSqlScript이 (...) 실제로 가장 좋은 솔루션입니다 사용하여 생각합니다.

    나는이에 대한 연구를 많이했고, 봄부터 UTIL 좋은 발견했다. 나는 더 유지 및 테스트로 SimpleJdbcTestUtils.executeSqlScript이 (...) 실제로 가장 좋은 솔루션입니다 사용하여 생각합니다.

    편집 : SimpleJdbcTestUtils이되지 않습니다. 당신은 JdbcTestUtils를 사용해야합니다. 링크를 업데이트했습니다.

  3. ==============================

    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. ==============================

    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. ==============================

    5.@ Pantelis Sopasakis

    @ Pantelis Sopasakis

    약간 GitHub의에서 수정 된 버전 : https://gist.github.com/831762/

    이 수정을 추적하기 위해 쉽게.

  6. ==============================

    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. ==============================

    7.또 다른 흥미로운 옵션은 스크립트를 실행하는 데 Jisql을 사용하는 것입니다. 소스 코드를 사용할 수 있기 때문에, 애플리케이션에 임베드 할 수 있어야한다.

    또 다른 흥미로운 옵션은 스크립트를 실행하는 데 Jisql을 사용하는 것입니다. 소스 코드를 사용할 수 있기 때문에, 애플리케이션에 임베드 할 수 있어야한다.

    편집 : 그것을주의 깊게 살펴 보았다; 뭔가 다른 내부를 삽입하는 것은 소스 코드에 약간의 수정을 요구한다.

  8. ==============================

    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. ==============================

    9.코드에 쓰기 :

    코드에 쓰기 :

  10. ==============================

    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. ==============================

    11.메이븐 SQL 플러그인을 사용하여 SQL 문을 파일 또는 파일 목록을 실행하기 위해이 플러그인

    메이븐 SQL 플러그인을 사용하여 SQL 문을 파일 또는 파일 목록을 실행하기 위해이 플러그인

  12. ==============================

    12.이 작업을 수행 할 수있는 방법이 정말 없습니다.

    이 작업을 수행 할 수있는 방법이 정말 없습니다.

    이 옵션에 대한 결정하면 당신도이 기사를 Runtime.exec의를 통해 (문자열 [])를 MySQL의 명령 행 클라이언트를 실행하고 읽을 수

    또는 iBATIS를에서 ScriptRunner (com.ibatis.common.jdbc.ScriptRunner)을 사용해보십시오. 그러나 그것은 단지 스크립트를 실행하기 위해 전체 라이브러리를 포함하는 약간 바보.

  13. from https://stackoverflow.com/questions/1044194/running-a-sql-script-using-mysql-with-jdbc by cc-by-sa and MIT license