자바 데이터베이스 에 SQL 스 크 립 트 파일 실행

본 논문 의 사례 는 자바 가 SQL 스 크 립 트 파일 을 데이터베이스 에 실행 하 는 구체 적 인 방식 을 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
방식 1:SQL 스 크 립 트 파일 의 내용 을 직접 읽 고 SQL 에 전달 합 니 다.
코드:RunSqlService:

  @Autowired
  private RunSqlDao runSqlDao;
  
  /**
   *        SQL   
   * @param sqlPath SQL     : :D:/TestProject/web/sql/  .Sql
   */
  public void runSqlByReadFileContent(String sqlPath) throws Exception {
    try {
       
      String sqlStr = readFileByLines(sqlPath);
      // System.out.println("     :" + sqlStr);
      if (sqlStr.length() > 0) {
        runSqlDao.runSqlBySqlStr(sqlStr);
      }
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }
  
  /**
   *          ,             
   */
  private String readFileByLines(String filePath) throws Exception {
    StringBuffer str = new StringBuffer();
    BufferedReader reader = null;
    try {
      reader = new BufferedReader(new InputStreamReader(
          new FileInputStream(filePath), "UTF-8"));
      String tempString = null;
      int line = 1;
      //       ,    null     
      while ((tempString = reader.readLine()) != null) {
        //     
        // System.out.println("line " + line + ": " + tempString);

        str = str.append(" " + tempString);
        line++;
      }
      reader.close();
    } catch (IOException e) {
      e.printStackTrace();
      throw e;
    } finally {
      if (reader != null) {
        try {
          reader.close();
        } catch (IOException e1) {
        }
      }
    }

    return str.toString();
  }
RunSqlDao : 

  /**
   * @param sqlStr
   */
  public void runSqlBySqlStr(String sqlStr) {
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("sqlStr", sqlStr);
    sqlSessionTemplate.selectList("runSql.runSqlBySqlStr", map);
  }
SQLMap:

<mapper namespace="runSql">

<select id="runSqlBySqlStr" parameterType="map">
<![CDATA[ ${sqlStr}]]>
</select>

</mapper>

이러한 쓰기:데이터 의 변화(추가,수정,삭제)만 지원 하고 SQL 파일 내용 은 begin 으로 시작 하여 end 로 끝 납 니 다.표 필드 수정 등 을 업데이트 할 수 없습니다.
방식 2;ScriptRunner 사용 하기
코드:RunSqlService:

  /**
   *   sql       ScriptRunner
   * @param sqlPath SQL     : :D:/TestProject/web/sql/  .Sql
   */
  public void runSqlByScriptRunner(String sqlPath) throws Exception {
    try {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      Connection conn = sqlSession.getConnection();
      ScriptRunner runner = new ScriptRunner(conn);
      runner.setEscapeProcessing(false);
      runner.setSendFullScript(true);      
      runner.runScript(new InputStreamReader(new FileInputStream(sqlPath), "UTF-8"));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }
이 문법:한 줄 의 SQL 만 있 을 수 있 습 니 다.즉,한 번 에 하나의 SQL 문 구 를 실행 할 수 있 습 니 다.그렇지 않 으 면 오 류 를 보고 할 수 있 습 니 다.
방식 3:ScriptUtils 사용
코드:RunSql Service:(다음 두 가지 방식:스 크 립 트.sql 과 RunSqlService 는 같은 디 렉 터 리 에 있 습 니 다)
방법(1)

  /**
   *   sql       Spring   
   */
  public void runSqlBySpringUtils() throws Exception {
    try {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      Connection conn = sqlSession.getConnection();
      ClassPathResource rc = new ClassPathResource("  .Sql", RunSqlDao.class);
      ScriptUtils.executeSqlScript(conn, rc);
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }
방법(2)

  /**
   *   sql       Spring   
   */
  public void runSqlBySpringUtils() throws Exception {
    try {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      Connection conn = sqlSession.getConnection();
      ClassPathResource rc = new ClassPathResource("  .Sql", RunSqlDao.class);
      EncodedResource er = new EncodedResource(rc, "utf-8");
      ScriptUtils.executeSqlScript(conn, er);
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }
방법(1),스 크 립 트.sql 파일 은 ANSI 여야 합 니 다.그렇지 않 으 면 데이터 에 실 행 된 한 자 는 어 지 러 운 코드 입 니 다.
방법(2)방법(1)의 문 제 를 해결 하고 완벽 해 졌 습 니 다.좋아 하 는 친구 들 은 어서 가 져 가서 드 세 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기