处于项目需求,需要能够批量执行SQL脚本文件,需要由前台页面操作触发执行。

查找相关资料,发现 Ant 提供了 SQLExec 组件可以支持SQL文件的执行,测试效果不错。

以下是对 SQLExec 封装后支持批量执行的执行器组件。

package com.ge.digital.spo.sql.execute.ant;
import java.io.File; import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.SQLExec;
import org.apache.tools.ant.types.EnumeratedAttribute; public class AntSqlRunner { public void runSqlScript() {
String driverClass = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";
String username = "root";
String password = "mysql";
String targetSqlFolder = "/home/ca6417/upload/RecoverySQL/"; // 存放SQL脚本的目录
String logOutputFolder = "/home/ca6417/upload/RecoverySQL/"; // 执行结果输出目录,出错的时候才会生成错误报告
runSqlScriptFiles(driverClass, url, username, password, targetSqlFolder, logOutputFolder);
} public static void runSqlScriptFiles(String driverClass, String url, String username, String password, String targetSqlFolder,
String logOutputFolder) {
SQLExec sqlExec = new SQLExec();
sqlExec.setDriver(driverClass);
sqlExec.setUrl(url);
sqlExec.setUserid(username);
sqlExec.setPassword(password);
// 如果执行过程有语句出错时如何处理,可以选择继续执行或停止.
sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(SQLExec.OnError.class, "stop")));
sqlExec.setPrint(true);
sqlExec.setProject(new Project());
String targetSqlFile = targetSqlFolder;
if(!new File(targetSqlFolder).isDirectory()) {
targetSqlFolder = new File(targetSqlFolder).getParentFile().getAbsolutePath();
}
runSqlScript(sqlExec, targetSqlFile, targetSqlFolder, logOutputFolder);
} private static void runSqlScript(SQLExec sqlExec, String targetFile, String targetSqlFolder, String logOutputFolder) {
File file = new File(targetFile);
if(file.isDirectory()) {
        // 如果是目录,遍历执行所有脚本
for(File f :file.listFiles()) {
String fileStr = f.getAbsolutePath();
runSqlScript(sqlExec, fileStr, file.getAbsolutePath(), logOutputFolder);
}
} else {
       // 如果是脚本文件,执行SQL脚本
String targetSqlFile = targetFile;
String logOutputFile = getLogOutputFile(logOutputFolder, targetSqlFolder, targetSqlFile);
runSqlScriptFile(sqlExec, targetSqlFile, logOutputFile);
}
} private static void runSqlScriptFile(SQLExec sqlExec, String targetSqlFile, String logOutputFile) {
sqlExec.setSrc(new File(targetSqlFile));
sqlExec.setOutput(new File(logOutputFile));
sqlExec.execute();
System.out.println(targetSqlFile + " execute success.");
} private static String getLogOutputFile(String logOutputFolder, String targetSqlFolder, String targetSqlFile) {
String logFileName = targetSqlFile.substring(, targetSqlFile.indexOf(".")) + ".txt";
logFileName = logFileName.replace(targetSqlFolder, logOutputFolder);
return logFileName;
}
}

作者:朝雨忆轻尘
出处:https://www.cnblogs.com/xifengxiaoma/
版权所有,欢迎转载,转载请注明原文作者及出处。

SQL脚本文件执行器的更多相关文章

  1. CUBRID学习笔记 28 执行sql脚本文件

    一下命令在csql下执行. insert_commands.sql为sql脚本文件 ;CL ;READ insert_commands.sql ;RU 第一行的cl 清空命令缓存,等同clear第二行 ...

  2. Java 执行 SQL 脚本文件

    转自:http://blog.csdn.net/hongmin118/article/details/4588941 package com.unmi.db; import java.io.FileI ...

  3. 如何执行一个mysql的sql脚本文件

    sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件.基本步骤如下:一.创建包含sql命 ...

  4. mysql执行sql脚本文件

    mysql执行sql脚本文件 方法一:使用cmd命令执行(windows下,unix或Linux在的其控制台下) [MySQL的bin目录]\mysql –u用户名 –p密码 –D数据库<[sq ...

  5. [转]SQL server2008 导入超大SQL脚本文件(超过10M)

    同事给我一个sqlserver的学习库,sql脚本导出有300m,gui执行有内存溢出的错误报出来,所以问了一下度娘,学而时习之:) 1. SQL server2008 导入超大SQL脚本文件(超过1 ...

  6. MySQL控制台执行.sql脚本文件

    用notepad++编写好一个.sql脚本文件: drop database if exists library; create database library default character ...

  7. 使用命令执行 sql 脚本文件

    使用命令执行 sql 脚本文件 方法: 在 Windows 下使用 cmd 命令执行(或 Unix 或 Linux 控制台下)[Mysql的bin目录]\mysql –u用户名 –p密码 –D数据库名 ...

  8. mysql中如何在命令行中,执行一个SQL脚本文件?

    需求描述: 在mysql数据库的使用中,有的时候,需要直接在shell的命令行中,执行某个SQL脚本文件, 比如,要初始化数据库,创建特定的存储过程,创建表等操作,这里进行一个基本的测试. 一般情况, ...

  9. Oracle使用超大SQL脚本文件恢复数据问题记录

    在以前获取的Oracle数据库备份一般都是dmp文件,创建表空间和用户就直接使用imp或者impdp导入即可. 这一次遇到的情况比较特殊,对方提供数据时给我的是使用SQLPlus导出的SQL脚本文件, ...

随机推荐

  1. 西邮Linux兴趣小组2014级免试挑战题 (续)

    在上一篇的博客中已经解到第四关了,现在继续挑战-- [ 第四关] 在上一关解压成功后,生成了一个file文件.用vim的二进制格式打开,转成十六进制,发现文件头格式如下: 是个以ELF字符开头的文件, ...

  2. node.js+express+mongodb

    主要是想用node.js链接mongodb,用的是mongoose.用ejs引擎,扩展到.html比较容易 小例子结构简单,框架清晰. 提交方法 路径 方法 作用 get add     post a ...

  3. Oracle EBS 采购 接收入库 接口开发

    http://blog.itpub.net/25164132/viewspace-746657/ 接收入库是项目中会经常碰到的开发,这类开发一般来说比较简单,但是接收入库在Oracle中其实涉及到很多 ...

  4. Android-ColorsUtil工具类

    颜色工具类 public class ColorsUtil { private ColorsUtil() { throw new Error("Do not need instantiate ...

  5. Intellij Idea 14编译golang 插件

    最近项目实在太赶了,很久没有写过博文了. 公司新配了一台笔记本电脑,原装win8的.于是又从linux回到了windows.不想用win命令行来搞go了,win下太折腾了.还是用一直使用的idea. ...

  6. DBCC--SHRINKDATABASE

    --DBCC SHRINKDATABASE --收缩数据库 --USAGE: dbcc SHRINKDATABASE ( { 'database_name' | database_id | 0 } [ ...

  7. 【mysql】Windows环境搭建(适用5.7以上)

    1 下载MySQL 登录 https://dev.mysql.com/downloads/mysql/ 2 配置 下载好了zip文件,解压至任意非中文目录,在根目录下新建my.ini: 输入以下内容( ...

  8. Servlet实现session读写

    前言     一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些面包,如果有鸡蛋的话,买6个回来,这个丈夫买了6个面包回来,他的妻子大吃一惊:你为什么买了6个面包?! 程序员丈夫回答:因为他们有 ...

  9. Django 项目 实现重定向并进行反向解析

    一.项目路由配置urls.py中 from django.conf.urls import include, url from django.contrib import admin # 匹配应用 u ...

  10. (2)特征点匹配,并求旋转矩阵R和位移向量t

    include头文件中有slamBase.h # pragma once // 各种头文件 // C++标准库 #include <fstream> #include <vector ...