Миграция базы данных - PullRequest
       18

Миграция базы данных

4 голосов
/ 20 апреля 2009

Я работаю над инструментом миграции баз данных в Java. Инструмент копирует таблицы базы данных с их данными в базу данных назначения. Но я хочу, чтобы он работал на разных базах данных. Скопируйте из mysql и создайте в derby и т.д. С помощью JDBC мы можем собрать достаточно информации о таблице и ее столбцах. Но я собираюсь спросить это, если я могу воссоздать таблицы на Java с SQL бесплатно. Я имею в виду, что разные базы данных имеют разные типы данных, и иногда они отличаются в синтаксисе SQL. Так может ли JDBC или любая другая библиотека (может быть с открытым исходным кодом) выполнять эту работу простым и глобальным способом?

Ответы [ 4 ]

2 голосов
/ 20 апреля 2009

Apache's DdlUtils делает то, что мне нужно. Когда я искал о CrossDB нашел его, и это очень полезно, но мощный. Он может генерировать базу данных с нуля, просто с параметрами. Или он может получить существующие определения таблицы базы данных, также с определениями индекса. Вы можете использовать разделитель, если хотите (для меня это смертельно важный вариант - использовать Apache Derby). Вы можете просто распечатать эти определения или применить их непосредственно к исходной базе данных (я еще не пробовал второе). Он переводит определения для выбранной базы данных. Но одна большая проблема в том, что нет хорошего учебника о том, как начать его использовать. Я искал пакеты, чтобы найти хорошее место для начала. Вот то, что я достиг, пример кода для создания полной таблицы базы данных создать sql.

DerbyPlatform dp = new DerbyPlatform();
dp.setDelimitedIdentifierModeOn(true);
Database dbs = new Database();
DerbyModelReader dmr = new DerbyModelReader(dp);
Database test = dmr.getDatabase(conn, "MyDBTest");

DerbyBuilder db = new DerbyBuilder(dp);
String testSqlDerby = dp.getCreateTablesSql(test, true, true);
System.out.println(testSqlDerby);

System.out.println("\n\n\n\n");

MySql50Platform mp = new MySql50Platform();
mp.setDelimitedIdentifierModeOn(true);
MySqlBuilder mb = new MySqlBuilder(mp);
String testSqlMysql = mp.getCreateTablesSql(test, true, true);
System.out.println(testSqlMysql);
1 голос
/ 05 июня 2009

Попробуйте SchemaCrawler, который также является открытым исходным кодом и написан на Java. Он обеспечивает программный доступ к метаданным базы данных, а также позволяет создавать сценарии в JavaScript. http://schemacrawler.sourceforge.net/

1 голос
/ 20 апреля 2009

Мне не известно, что у JDBC есть универсальное средство для этого. Возможно, вам придется создать служебную библиотеку, которая генерирует SQL для создания таблицы.

Начните с того, что выполняет ANSI SQL, и протестируйте его на любом количестве платформ, которое вы намереваетесь поддерживать. Помните, что Java все еще используется для однократной записи, везде отлаживается, поэтому вам нужно будет проверить это на любой платформе, на которой вы собираетесь поддерживать систему. Подклассируйте генератор, если вам нужно сделать диалектические вариации оператора create для любой из ваших платформ.

0 голосов
/ 20 апреля 2009

попробуйте посмотреть, что HIBERNATE предоставляет для миграции. Я знаю, что H может генерировать объекты модели из схемы базы данных и схему из объектов модели. Так что, может быть, вы можете использовать некоторые части из HIBERNATE. У них есть понятие DIALECT, которое делает именно то, что вы говорите: определение специфики реализации БД.

...