利用Ant 执行SQL 脚本

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 利用 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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
|
16天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
29 0
|
6月前
|
SQL 关系型数据库 MySQL
SQL脚本相除
【5月更文挑战第6天】
66 3
|
3月前
|
存储 SQL Go
全网最长的sql server巡检脚本分享(1000行)
全网最长的sql server巡检脚本分享(1000行)
52 1
|
3月前
|
SQL 存储 关系型数据库
bat脚本拼写SQL并写文件
【8月更文挑战第7天】bat脚本拼写SQL并写文件
45 5
|
3月前
|
SQL 存储 Go
SQL Server一键巡检脚本分享
SQL Server一键巡检脚本分享
29 0
|
3月前
|
SQL 监控 安全
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
在Linux中,如何检测和防止SQL注入和跨站脚本(XSS)攻击?
|
4月前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
|
3月前
|
SQL 存储 Oracle
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新、升级方式,防止多次重复执行
63 0
|
3月前
|
SQL 运维 Oracle
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
43 0