利用Ant 执行SQL 脚本

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 利用 Ant 的SQL Task来实现执行SQL 脚本的功能

pom.xml 添加ant

<dependency>
  <groupId>org.apache.ant</groupId>
  <artifactId>ant</artifactId>
  <version>1.10.9</version>
  <exclusions>
    <exclusion>
      <artifactId>tools</artifactId>
      <groupId>com.sun</groupId>
    </exclusion>
  </exclusions>
</dependency>
import lombok.extern.slf4j.Slf4j;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.SQLExec;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.util.Properties;

/**
 * <p>导入sql文件到数据库</p>
 *
 * @Date 2021/4/13 17:48
 */
@Slf4j
public class ScriptSql {
   
   
    // test.sql文件放在resources目录下
    private static final String SCRIPT_SQL = "classpath:test.sql";

    public static void exeSQLSript(Properties prop) throws Exception {
   
   
        //读取sql脚本文件保存到数组中
        String[] sqlName = {
   
   SCRIPT_SQL};
        //循环执行sql脚本
        for (int i = 0; i < sqlName.length; i++) {
   
   
            //利用 Ant 的SQL Task来实现执行SQL 脚本的功能。ant 包中的 SQLExec类的扩展
            SQLExec sqlExec = new SQLExec();
            String mysqlDriver = prop.getProperty("driver","com.mysql.cj.jdbc.Driver");
            String url = prop.getProperty("url");
            // 获取用户密码,默认为root/root
            String username = prop.getProperty("username","root");
            String password = prop.getProperty("password","root");

            // 设置数据库参数
            sqlExec.setDriver(mysqlDriver);
            sqlExec.setUrl(url);
            sqlExec.setUserid(username);
            sqlExec.setPassword(password);
            //防止乱码,sql文件也需要设置为utf-8
            sqlExec.setEncoding("UTF8");
            //设置sql脚本
            File file = ResourceUtils.getFile(SCRIPT_SQL);
            sqlExec.setSrc(file);
            // 设置是否输出 true-打印,false-不打印
            sqlExec.setPrint(true);
            // 要指定这个属性,不然会出错
            sqlExec.setProject(new Project());
            sqlExec.setOutputEncoding("UTF8");
            sqlExec.setAutocommit(true);
            sqlExec.execute();
            log.info("sqlExec execute success!");
        }
    }

    public static void main(String[] args) {
   
   
        Properties prop = new Properties();
        prop.setProperty("url",  "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=Asia/Shanghai");
        prop.setProperty("username", "root");
        prop.setProperty("password", "root");
        try {
   
   
            ScriptSql.exeSQLSript(prop);
        } catch (Exception e) {
   
   
            e.printStackTrace();
        }
    }
}

注意:这里的test数据源是已经存在的,否则会报异常Unknown database 'test'
执行之前
image.png

执行之后
image.png

自动创建了相关的表
可以应用到系统升级时自动更新表结构或创建新表,避免人工干预

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
SQL 测试技术 数据库
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
SQL注入,跨站脚本,跨站请求伪造,傻傻分不清楚
|
7月前
|
SQL 数据库
PowerDesigner导出SQL脚本运行注释出现乱码问题
PowerDesigner导出SQL脚本运行注释出现乱码问题
164 0
|
11月前
|
SQL 数据库
PowerDesigner16(PDM)pd生成数据库sql脚本
今天使用PowerDesigner16软件生成数据库脚本的时候遇到了一些问题,但是经过不懈努力最终修成正果,下面将小编的经历以及错误解决方案与大家分享。
|
7月前
|
SQL 关系型数据库 MySQL
MySql数据库中的视图,索引与数据库sql脚本如何导入与导出---(详细介绍)
MySql数据库中的视图,索引与数据库sql脚本如何导入与导出---(详细介绍)
260 0
|
19天前
|
SQL 关系型数据库 MySQL
SQL脚本相除
【5月更文挑战第6天】
28 3
|
19天前
|
SQL 关系型数据库 MySQL
|
19天前
|
SQL 关系型数据库 MySQL
|
19天前
|
SQL 关系型数据库 MySQL
SQL脚本字符串替换
【5月更文挑战第3天】
28 4
|
19天前
|
SQL 关系型数据库 MySQL
SQL脚本列转行
【5月更文挑战第2天】
19 0
|
19天前
|
SQL 关系型数据库 MySQL
SQL脚本行转列
【5月更文挑战第1天】
17 0