java 执行sql文件

时间:2022-05-07
本文章向大家介绍java 执行sql文件,主要内容包括# 背景、# 步骤、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

# 背景

用例执行完毕,期望回滚数据,因此希望执行sql来回滚数据

# 步骤

直接show代码,借助的是mybatis的ScriptRunner

/**
     * 执行xx库下的表备份脚本
     *
     * @param tableName
     */
    public static void runSqlInStat(String tableName) {

        String className = Configurations.INSTANCE.get("jdbc.xx.driver");
        String dbUrl = Configurations.INSTANCE.get("jdbc.xx.url");
        String dbUsername = Configurations.INSTANCE.get("jdbc.xx.username");
        String dbPassword = Configurations.INSTANCE.get("jdbc.xx.password");

        try {
            Class.forName(className);
            Connection conn = DriverManager.getConnection(dbUrl, dbUsername, dbPassword);
            ScriptRunner runner = new ScriptRunner(conn);
            runner.setAutoCommit(true);

            String fileName = String.format("src/main/resources/db/%s.sql", tableName);
            File file = new File(fileName);

            try {
                if (file.getName().endsWith(".sql")) {
                    runner.setFullLineDelimiter(false);
                    runner.setDelimiter(";");//语句结束符号设置
                    runner.setLogWriter(null);//日志数据输出,这样就不会输出过程
                    runner.setSendFullScript(false);
                    runner.setAutoCommit(true);
                    runner.setStopOnError(true);
                    runner.runScript(new InputStreamReader(new FileInputStream(fileName), "utf8"));
                    logger.info(String.format("【%s】回滚成功", tableName));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {

            e.printStackTrace();
        }

    }