Java Spring Boot Ibatis ScriptRunner 執行SQL 指令碼檔案
阿新 • • 發佈:2020-12-25
1、 引入資料來源
import javax.sql.DataSource;
@Autowired
private DataSource dataSource;
2、Utils書寫
import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.io.Resources; import org.apache.ibatis.jdbc.ScriptRunner; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import javax.sql.DataSource; import java.io.Reader; import java.nio.charset.Charset; import java.sql.Connection; @Slf4j public class ScriptRunnerExecSqlUtils { public static void executesql(DataSource dataSource,String path) throws Exception{ Connection conn =dataSource.getConnection(); ScriptRunner runner = new ScriptRunner(conn); Resources.setCharset(Charset.forName("UTF-8")); //設定字符集,不然中文亂碼插入錯誤 runner.setLogWriter(null);//設定是否輸出日誌 // 絕對路徑讀取 // Reader read = new FileReader(new File("f:\\test.sql")); // 從class目錄下直接讀取 Resource resource = new ClassPathResource("static/"+path); Reader read = Resources.getResourceAsReader(((ClassPathResource) resource).getPath()); runner.runScript(read); runner.closeConnection(); conn.close(); System.out.println("sql指令碼執行完畢"); } }
3、呼叫util
ScriptRunnerExecSqlUtils.executesql(dataSource,"UPDATE_13.sql");
附:
檔案路徑:
SQL寫法 (用分號隔開逐行執行)
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vw_qdtjdmh]') and OBJECTPROPERTY(id, N'IsView') = 1) drop view [dbo].[vw_qdtjdmh]; CREATE VIEW vw_qdtjdmh AS select h.djbh,kehu.khdm from qdtjdmh as h,kehu where kehu.TZSY=0 and( (h.XZDM=0 and kehu.QDDM=h.qddm) or (h.XZDM=0 and kehu.KHDM =h.KHDM )); if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[vw_qdtjd]') and OBJECTPROPERTY(id, N'IsView') = 1) drop view [dbo].[vw_qdtjd]; CREATE VIEW vw_qdtjd AS select d.djbh,d.lxdj,h.khdm,p.SPDM,p.JE4, p.JE5, p.JE6, p.JE7, p.JE8, p.ZK,(case when (substring(d.lxdj,6,1) = 1) then 1 else 0 end) AS zktz from qdtjd as d,vw_qdtjdmh as h,qdtjdmp p where d.DJBH=h.djbh and d.DJBH=p.DJBH and d.JZ=1 and d.SP=0 and getDate() between d.RQ_1 and d.rq_2;