자바 데이터베이스 에 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)의 문 제 를 해결 하고 완벽 해 졌 습 니 다.좋아 하 는 친구 들 은 어서 가 져 가서 드 세 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.