java执行SQL脚本文件适用大多数据库

利用ibatis的ScriptRunner执行sql文件,以下源码在mySql数据库测试通过。。oracl也测试通过,但需要更改驱动及相关信息。

maven项目工程需要引入相应jar包

<dependency>  
    <groupId>org.mybatis</groupId>  
    <artifactId>mybatis</artifactId>  
    <version>3.3.0</version>  
</dependency>

其他项目需要下载mybatis的jar包。。。。

直接上源码::

package Jacky.utils

import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;

import org.apache.ibatis.jdbc.ScriptRunner;
import org.apache.log4j.Logger;

/*
 * 当前设置能够保证文件的sql在同一个事务内执行,如果需要改变为错误仍然继续执行,
 * 只需修改参数:
 * conn.setAutoCommit(false);//改为true
 * runner.setAutoCommit(false);//该为true
 * runner.setStopOnError(true);//修改为false

 */
public class ScriptRunnerExecSql {
    private static Logger LOG = Logger.getLogger(ScriptRunnerExecSql.class.getName());

    /**
     * 
    * @Title: execSqlFileByMysql
    * @Description: TODO()
    * @return void    返回类型
    * @param ip
    * @param port
    * @param userName
    * @param pwd
    * @param sqlFilePath
    * @param dbName
    * @throws Exception
     */
    public static void execSqlFileByMysql(String ip, String port, String userName, String pwd, String sqlFilePath,
            String dbName) throws Exception {

        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://" + ip + ":" + port + "/" + dbName;

        Exception error = null;
        Connection conn = null;
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, userName, pwd);
//          设置不自动提交
            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), "utf-8"));
            conn.commit();
        } catch (Exception e) {
            conn.rollback();
            LOG.error("执行sql文件进行数据库创建失败....", e);
            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("192.168.2.23", "3306", "root", "root",
                    "C:\\Users\\Administrator\\Desktop\\business_collaboration.sql", "business_collaboration");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值