利用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();
}
}
}