API Java pour le langage de définition de données SQL [fermé]


Avant d'en écrire un, existe-t-il une API Java pour manipuler une base de données. Comme un wrapper orienté objet autour de java.sql.DatabaseMetaData, avec un support pour des choses comme Schema.createTable(name, columns)?

Évidemment, les instructions SQL correctes doivent être exécutées en arrière-plan en fonction de la base de données utilisée.

Je suis spécifiquement intéressé par une API pour effectuer des instructions DDL.

Author: Chris Dennett, 2011-06-22

7 answers

DdlUtils d'Apache fait cela https://db.apache.org/ddlutils/

 1
Author: ykaganovich, 2016-03-23 21:44:29

De nombreux frameworks de mappage objet-relationnel sont livrés avec des outils pour générer des classes de modèle de domaine à partir d'un schéma existant, ou créer (ou même mettre à jour) un schéma pour correspondre aux classes de modèle de domaine.

En particulier, hibernate peut le faire, voir

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

 2
Author: meriton, 2011-06-22 22:36:43

Pour autant que je me souvienne, certains outils tels que NetBeans peuvent créer/ modifier des schémas de base de données à la volée. Vous pouvez consulter le code source si vous ne trouvez pas de bibliothèque spécifique.

 1
Author: Puce, 2011-06-22 17:18:12

Avez-vous envisagé des appels JDBC directs uisng ?

Pour des raisons de contrôle et de sécurité, j'aime séparer DDL et DML avec ORM et JDBC respectivement. Cela permet aux codeurs moins expérimentés de se concentrer sur la manipulation des données ( via hibernate ).

Probablement juste mon parti pris "old school"....

Hibernate peut faire certaines fonctions DDL mais je ne l'ai pas largement utilisé pour cela . Je crois qu'il ne peut pas créer de tables dynamiquement (c'est-à-dire sur une base de données existante en cours d'exécution ) par exemple .

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");
}
 1
Author: stimpy, 2011-06-22 22:19:23

API Java pour DDL en SQL: J'ai dû en construire une pour mon projet, donc je l'ai publiée en open-source: https://bitbucket.org/aragot/play-sql-dialects (licence APL2)

La licence dit qu'il est correct de dériver et d'inclure dans un projet à vendre, tant que vous respectez les termes.

Il n'y a qu'un dialecte complet pour PostgreSQL. N'hésitez pas à contribuer au support de MySQL ou Oracle. La partie malheureuse est qu'Oracle et MySQL ne prennent pas en charge la DDL transactionnelle, donc en cas de exception vous devez récupérer l'état de la base de données, ce qui est la raison pour laquelle je n'ai pas pris la peine.

Exemple:

    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);
 1
Author: Adrien, 2015-07-28 16:04:13

J'ai toujours pensé que si vous utilisiez des instructions préparées pour votre SQL, vous pourriez facilement changer le connecteur de base de données et passer à une base de données différente, celle qui a les connecteurs JDBC pertinents.

 0
Author: nikhil, 2011-06-22 17:08:37

Nous utilisons l'intégration de données Pentaho (ex-Kettle) avec un certain succès, bien que les API de l'édition communautaire soient mal documentées. Cela peut nécessiter un piratage, mais l'abstraction et les nombreuses fonctionnalités qu'il fournit peuvent en valoir la peine.

 0
Author: Gino M., 2013-01-30 14:43:26