package cn.stylefeng.roses.kernel.db.api.util; import cn.hutool.core.io.IoUtil; import cn.stylefeng.roses.kernel.db.api.exception.DaoException; import cn.stylefeng.roses.kernel.db.api.exception.enums.DatabaseExceptionEnum; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.support.EncodedResource; import org.springframework.jdbc.datasource.init.ScriptUtils; import java.sql.Connection; import java.sql.DriverManager; /** * sql文件执行 * * @author fengshuonan * @date 2019-06-18-17:10 */ @Slf4j public class SqlRunUtil { /** * 执行sql脚本文件,使用Spring工具类 * * @author fengshuonan * @date 2021/5/19 10:52 */ public static void runClassPathSql(String classpathFileName, String driverClassName, String url, String username, String password) { Connection conn = null; try { Class.forName(driverClassName); conn = DriverManager.getConnection(url, username, password); ClassPathResource classPathResource = new ClassPathResource(classpathFileName); EncodedResource encodedResource = new EncodedResource(classPathResource, "utf-8"); ScriptUtils.executeSqlScript(conn, encodedResource); } catch (Exception e) { log.error("执行sql错误!", e); throw new DaoException(DatabaseExceptionEnum.SQL_EXEC_ERROR, e.getMessage()); } finally { IoUtil.close(conn); } } /** * 执行系统路径sql的文件 * * @author fengshuonan * @date 2021/5/19 10:52 */ public static void runFileSystemSql(SqlSessionFactory sqlSessionFactory, String sqlPath) { Connection conn = null; try { SqlSession sqlSession = sqlSessionFactory.openSession(); conn = sqlSession.getConnection(); FileSystemResource classPathResource = new FileSystemResource(sqlPath); EncodedResource encodedResource = new EncodedResource(classPathResource, "GBK"); ScriptUtils.executeSqlScript(conn, encodedResource); } catch (Exception e) { log.error("执行sql错误!", e); throw new DaoException(DatabaseExceptionEnum.SQL_EXEC_ERROR, e.getMessage()); } finally { IoUtil.close(conn); } } }