Как создать базу данных в MySQL, SQL Server и Oracle из одной сборки ANT? - PullRequest
4 голосов
/ 30 декабря 2011

Как мне создать базу данных с нуля, создать таблицы и заполнить их некоторыми примерами данных в MySQL, SQL Server, а также Oracle, используя одну сборку ANT?

Ответы [ 4 ]

2 голосов
/ 31 декабря 2011

Я бы рекомендовал использовать что-то вроде Liquibase , если вам нужно управлять определением схемы нескольких СУБД.

Определение схемы Liquibase не зависит от СУБД, и Liquibase будет обрабатывать перевод на различные диалекты для вас. Тем не менее, в определении схемы все еще может быть специфичный для СУБД код.

У Liquibase есть Задача Ant , чтобы вы могли интегрировать ее в свой скрипт сборки. Но так как вы можете в основном вызывать любую Java-программу из Ant, вы также можете использовать «нормальный» режим командной строки.

Обратите внимание, что "создание базы данных" в мире Oracle обычно означает создание полноценного экземпляра, что, безусловно, не то, что вы хотите (и, конечно, администратор БД этого не допустит)

2 голосов
/ 30 декабря 2011

То, что мы делаем с муравьем и mysql , выглядит следующим образом:

Подготовьте файл SQL следующим образом:

drop database if exists test;
create database test character set utf8;
use test;

create table Account_ (
...fields
) engine InnoDB;

create .... more tables ...

Используйте сценарий муравья следующим образом:

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

Так что я думаю, что основная проблема, с которой вам приходится иметь дело, - это создание примера файла sql, не работающего с Ant.

То, что мы делаем, - это напишем пример sql-builder, который генерирует данные в соответствии с ftl-файлами (которые показывают структуры таблиц). Мы просто запускаем его из муравья, вся логика в чистом Java.

1 голос
/ 25 февраля 2012

Никто не упомянул об этом, но вы также можете использовать задачу ant sql.Ниже муравей макрос, который я использую.Макрос зависит от набора свойств, которые считываются из файла .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';
0 голосов
/ 31 декабря 2011

Один из вариантов - поддерживать разные сценарии sql и запускать их из ant, используя exec task . Второй вариант будет иметь один файл метаинформации, из которого вы генерируете соответствующий sql для базы данных, а затем используете exec task.

Я согласен, что liquibase будет для вас самым элегантным решением с открытым исходным кодом. Вам может потребоваться ручных шагов.

То, что мы делаем, немного отличается. Мы создаем пользовательскую программу Java, которая может загружать sql и делать вызовы jdbc. Это работает, самая слабая часть будет в разборе файлов .sql. Эта Java-программа вызывается из задачи муравья, используя Java-задачу

Создание базы данных - это может быть автоматизировано, но очень тесно связано с сервером базы данных. Oracle dbca имеет командные строки. Если это для какого-то внутреннего развертывания, скажем, тестирования? В этом случае будет достаточно использовать другую схему, которая может быть обработана с помощью jdbc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...