1. 程式人生 > 其它 >Java Spring Boot Ibatis ScriptRunner 執行SQL 指令碼檔案

Java Spring Boot Ibatis ScriptRunner 執行SQL 指令碼檔案

技術標籤:Java後端資料庫

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;