java jdbc执行Oracle sql文件

发布于:2025-05-23 ⋅ 阅读:(21) ⋅ 点赞:(0)

执行代码


import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.DriverManager;

import org.apache.ibatis.jdbc.ScriptRunner;

public class ExecSqlFileController {

    public static void execSqlFileByMysql(String sqlFilePath) throws Exception {

        // Oracle数据库的JDBC URL,用户名和密码
        String url = "jdbc:oracle:thin:@xxx.xxxx.xxx.xxx:15211:orclgbk";
        String username = "xxxx";
        String password = "xxxx";

        Exception error = null;
        Connection conn = null;
        try {
            // 加载Oracle JDBC驱动程序
            Class.forName("oracle.jdbc.driver.OracleDriver");

            // 建立连接
            conn = DriverManager.getConnection(url, username, password);

//          设置不自动提交
            conn.setAutoCommit(false);

            ScriptRunner runner = new ScriptRunner(conn);
//          设置不自动提交
            runner.setAutoCommit(false);
            /*
             * setStopOnError参数作用:遇见错误是否停止;
             * (1)false,遇见错误不会停止,会继续执行,会打印异常信息,并不会抛出异常,当前方法无法捕捉异常无法进行回滚操作,无法保证在一个事务内执行;
             * (2)true,遇见错误会停止执行,打印并抛出异常,捕捉异常,并进行回滚,保证在一个事务内执行;
             */
            runner.setStopOnError(true);

            /*
             * 按照那种方式执行
             * 方式一:true则获取整个脚本并执行;
             * 方式二:false则按照自定义的分隔符每行执行;
             */
            runner.setSendFullScript(false);

//          定义命令间的分隔符
            runner.setDelimiter(";");
            runner.setFullLineDelimiter(false);

//          设置是否输出日志,null不输出日志,不设置自动将日志输出到控制台
            runner.setLogWriter(null);

//          如果又多个sql文件,可以写多个runner.runScript(xxx),
            runner.runScript(new InputStreamReader(new FileInputStream(sqlFilePath), StandardCharsets.UTF_8));
            conn.commit();

        } catch (Exception e) {
            assert conn != null;
            conn.rollback();
            error = e;
        } finally {
            close(conn);
        }
        if (error != null) {
            throw error;
        }

    }

    private static void close(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (Exception e) {
            if (conn != null) {
                conn = null;
            }
        }
    }

    public static void main(String[] args) {
        try {
            execSqlFileByMysql("C:\\Users\\zhou\\Desktop\\test.sql");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到