如何在MySQL, SQL Server和Oracle中从单个ANT构建创建数据库



如何从零开始创建数据库,在MySQL, SQL Server以及Oracle中创建表并填充一些示例数据?

我们对antmysql的处理如下:

准备如下SQL文件:

drop database if exists test;
create database test character set utf8;
use test;
create table Account_ (
...fields
) engine InnoDB;
create .... more tables ...

使用ant脚本如下:

<exec executable="mysql" input="test.sql" />

所以我认为你必须处理的主要问题是生成示例sql文件,而不是与Ant一起工作。

我们正在做的是写一个sample-sql-builder,它根据ftl文件(它显示了表结构)生成数据。我们只是在ant中运行它,所有的逻辑都是纯java的

如果你需要管理一个多dbms模式定义,我建议使用像Liquibase这样的东西。

Liquibase模式定义与dbms无关,Liquibase将为您处理转换成各种方言的问题。但是,您仍然可以在模式定义中使用特定于DBMS的代码。

Liquibase有一个Ant任务,所以你可以把它集成到你的构建脚本中。但是,由于基本上可以从Ant中调用任何Java程序,因此也可以使用"普通"命令行模式。

请注意,在Oracle世界中,"创建一个数据库"通常意味着一个完整的实例创建,这肯定不是你想要的(也肯定不是DBA允许的)

没有人提到它,但是您也可以使用ant sql任务。下面是我使用的ant宏。这个宏依赖于一堆属性,这些属性是从一个。properties文件中读取的,多年来,我使用这个宏的变体与Postgres, Oracle, MySQL, DB2, MS SQL Server

<macrodef name="oracle-admin">
    <attribute name="sqlfile" />
    <attribute name="onerror" default="continue" />
    <attribute name="autocommit" default="true" />
    <attribute name="expandproperties" default="true" />
    <attribute name="delimitertype" default="normal" />
    <sequential>
        <sql 
            driver="oracle.jdbc.OracleDriver" 
        url="${oracle.url}" 
        userid="${oracle.db.admin.user}" 
        password="${oracle.db.admin.password}" 
        classpath="${oracle.jdbc.jar}" 
        expandproperties="@{expandproperties}"
        keepformat="true"
        delimitertype="@{delimitertype}"
        rdbms="oracle"
        onerror="@{onerror}"  
        print="true"
        autocommit="@{autocommit}">
           <transaction src="@{sqlfile}"> </transaction>
        </sql>
       </sequential>        
    </macrodef>

给宏提供一个SQL文件,SQL文件可以包含两个属性,这些属性将被属性文件中的值所替换。

CREATE ROLE ${postgres.db.user} 
WITH   
       LOGIN
       PASSWORD '${postgres.db.password}';
CREATE DATABASE ${postgres.db.database}
       OWNER ${postgres.db.user}
       ENCODING='UTF8';

一种选择是维护不同的sql脚本,并使用exec任务从ant运行它们。第二种选择是有一个元信息文件,从中你为数据库生成合适的sql,然后使用exec任务。

我同意liquidbase将是最优雅的开源解决方案。您可能需要一些手动步骤。

我们所做的有点不同。我们创建自定义java程序来加载sql并进行jdbc调用。这是可行的,最薄弱的部分将是解析.sql文件。这个java程序是从ant任务中调用的,使用java task

数据库创建-这可以自动化-但与数据库服务器紧密耦合。Oracle dbca有命令行。如果这是用于某种内部部署,比如测试?在这种情况下,使用不同的模式就足够了——这可以通过jdbc处理。

相关内容

  • 没有找到相关文章

最新更新