Подтвердить что ты не робот

Java API для языка определения данных SQL

Прежде чем написать один, есть ли API Java для управления базой данных. Как обертка, ориентированная на объект вокруг java.sql.DatabaseMetaData, с поддержкой таких вещей, как Schema.createTable(name, columns)?

Очевидно, что правильные операторы SQL должны выполняться в фоновом режиме на основе используемой БД.

Меня особенно интересует API для выполнения операторов DDL.

4b9b3361

Ответ 2

Многие механизмы объектно-реляционного сопоставления поставляются с инструментами для создания классов модели домена из существующей схемы или создания (или даже обновления) схемы для соответствия классам моделей домена.

В частности, спящий режим может это сделать, см.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#toolsetguide-s1

Ответ 3

Насколько я помню, некоторые инструменты, такие как NetBeans, могут создавать/изменять схемы базы данных "на лету". Вы можете посмотреть исходный код, если не найдете конкретную библиотеку.

Ответ 4

Рассматривали ли вы прямые звонки JDBC?

Для контроля и соображений безопасности мне нравится разделять DDL и DML с ORM и JDBC соответственно. Это позволяет менее опытным кодерам сосредоточиться на манипулировании данными (через спящий режим).

Наверно, только моя "старая школа" предвзято....

Hibernate может выполнять некоторые функции DDL, но я не использовал его для этого. Я считаю, что он не может создавать таблицы динамически (например, на существующей существующей БД), например.

public static void createEmployees()
{
    Connection con = getConnection();

    String createString;
    createString = "create table Employees (" +
                        "Employee_ID INTEGER, " +
                        "Name VARCHAR(30))";
    try {
        stmt = con.createStatement();
        stmt.executeUpdate(createString);
        stmt.close();
        con.close();

    } catch(SQLException ex) {
        System.err.println("SQLException: " + ex.getMessage());
    }
    JOptionPane.showMessageDialog(null,"Employees Table Created");
}

Ответ 5

Java API для DDL в SQL: мне нужно было создать его для моего проекта, поэтому я опубликовал его как open-source: https://bitbucket.org/aragot/play-sql-dialects (лицензия APL2)

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

В PostgreSQL имеется только полный диалект. Пожалуйста, не стесняйтесь предоставлять поддержку MySQL или Oracle. К сожалению, Oracle и MySQL не поддерживают транзакционный DDL, поэтому в случае исключения вам нужно восстановить состояние базы данных, поэтому я не беспокоился.

Пример:

    if (rDialect.hasSchema("schema_test")) {
        rDialect.dropSchema("schema_test");
    }

    rDialect.createSchema("schema_test");
    rDialect.setDefaultSchema("schema_test");
    DDLColumn colID = new DDLColumn("ID", "#", null, null, null, DDLColumn.DataType.INTEGER, null, null, null);
    DDLColumn colPOSITION = new DDLColumn("POSITION", "POSITION", null, null, null, DDLColumn.DataType.TEXT, null, null, null);
    DDLColumn column1 = new DDLColumn("COL1", "Column 1", null, "integer-renderer", null, DDLColumn.DataType.INTEGER, null, null, null);
    DDLColumn column2 = new DDLColumn("COL2", "Column 2", null, "as-string", null, DDLColumn.DataType.TEXT, null, null, null);
    DDLTable table = new DDLTable(true, "test1", "Test 1", colID, colPOSITION, column1, column2);
    rDialect.createTable(table);

Ответ 6

Я всегда думал, что если вы использовали подготовленные операторы для своего SQL, вы могли бы без труда изменить соединитель базы данных и переключиться на другую базу данных, в которой есть соответствующие JDBC-коннекторы.

Ответ 7

Мы с успехом применяем интеграцию данных Pentaho (ex-Kettle), хотя API Community Edition плохо документированы. Это может потребовать некоторого взлома, но абстракция и многие функции, которые она предоставляет, могут стоить того.