Mybaits执行sql文件

批量SQL执行器:MyScriptRunner类详解
文章介绍了MyScriptRunner类,一个用于批量执行MySQLSQL的工具,支持批处理和逐行执行,提供错误处理和事务控制。

1. 批量执行的MyScriptRunner类

import org.apache.ibatis.jdbc.RuntimeSqlException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 批量执行mysql的sql执行器类
 * @author 
 * @date 2023年10月10日
 */
public class MyScriptRunner {
   
   

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    private static final String LINE_SEPARATOR = System.lineSeparator();

    private static final String DEFAULT_DELIMITER = ";";

    private static final Pattern DELIMITER_PATTERN = Pattern.compile("^\\s*((--)|(//))?\\s*(//)?\\s*@DELIMITER\\s+([^\\s]+)", Pattern.CASE_INSENSITIVE);

    private final Connection connection;

    private boolean stopOnError;
    private boolean throwWarning;
    private boolean autoCommit;
    private boolean sendFullScript;
    private boolean removeCRs;
    private boolean escapeProcessing = true;
    private StringWriter msg;


    private PrintWriter logWriter = new PrintWriter(System.out);
    private PrintWriter errorLogWriter = new PrintWriter(System.err);

    private String delimiter = DEFAULT_DELIMITER;
    private boolean fullLineDelimiter;

    public MyScriptRunner(Connection connection) {
   
   
        this.connection = connection;
    }

    public void setStopOnError(boolean stopOnError) {
   
   
        this.stopOnError = stopOnError;
    }

    public void setThrowWarning(boolean throwWarning) {
   
   
        this.throwWarning = throwWarning;
    }

    public void setAutoCommit(boolean autoCommit) {
   
   
        this.autoCommit = autoCommit;
    }

    public StringWriter getMsg() {
   
   
        return msg;
    }

    public void setMsg(StringWriter msg) {
   
   
        this.msg = msg;
    }

    public void setSendFullScript(boolean sendFullScript) {
   
   
        this.sendFullScript = sendFullScript;
    }

    public void setRemoveCRs(boolean removeCRs) {
   
   
        this.removeCRs = removeCRs;
    }

    /**
     * Sets the escape processing.
     * @param escapeProcessing
     *          the new escape processing
     * @since 3.1.1
     */
    public void setEscapeProcessing(boolean escapeProcessing) {
   
   
        this.escapeProcessing = escapeProcessing;
    }

    public void setLogWriter(PrintWriter logWriter) {
   
   
        this.logWriter = logWriter;
    }

    public void setErrorLogWriter(PrintWriter errorLogWriter) {
   
   
        this.errorLogWriter = errorLogWriter;
    }

    public void setDelimiter(String delimiter) {
   
   
        this.delimiter = delimiter;
    }

    public void setFullLineDelimiter(boolean fullLineDelimiter) {
   
   
        this.fullLineDelimiter = fullLineDelimiter;
    }

    public void runScript(Reader reader) {
   
   
        setAutoCommit();

        try {
   
   
            if (sendFullScript) {
   
   
                executeFullScript(reader);
            } else {
   
   
                executeLineByLine(reader);
            }
        } finally {
   
   
            rollbackConnection();
        }
    }

    /**
     * 执行sql
     * @param reader 读取字符流的类
     */
    private void executeFullScript(Reader reader) {
   
   
        StringBuilder script = new StringBuilder()</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值