API Java pour langage de définition de données SQL

Avant d’en écrire un, existe-t-il une API Java permettant de manipuler une firebase database? Comme un wrapper orienté object autour de java.sql.DatabaseMetaData , avec un support pour des choses comme Schema.createTable(name, columns) ?

Il est évident que les instructions SQL correctes doivent être exécutées en arrière-plan en fonction de la firebase database utilisée.

Je suis particulièrement intéressé par une API permettant d’effectuer des instructions DDL.

DdlUtils d’Apache fait ceci https://db.apache.org/ddlutils/

De nombreux frameworks de mappage relationnel-object sont livrés avec des outils permettant de générer des classes de modèle de domaine à partir d’un schéma existant ou de créer (ou même de mettre à jour) un schéma correspondant 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

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

Avez-vous envisagé de passer des appels JDBC directs?

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 le mode veille prolongée).

Probablement juste mon biais “old school” ….

Hibernate peut effectuer certaines fonctions DDL, mais je ne l’ai pas beaucoup utilisé pour cela. Je crois qu’il ne peut pas créer de tables de manière dynamic (sur une firebase database existante), par exemple.

 public static void createEmployees() { Connection con = getConnection(); Ssortingng createSsortingng; createSsortingng = "create table Employees (" + "Employee_ID INTEGER, " + "Name VARCHAR(30))"; try { stmt = con.createStatement(); stmt.executeUpdate(createSsortingng); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("SQLException: " + ex.getMessage()); } JOptionPane.showMessageDialog(null,"Employees Table Created"); } 

API Java pour DDL en SQL: je devais en créer une pour mon projet. Je l’ai donc publiée en tant que source ouverte: https://bitbucket.org/aragot/play-sql-dialects (licence APL2).

La licence indique que vous pouvez dériver et inclure dans un projet en vente, à condition de respecter les conditions.

Il n’y a qu’un dialecte complet pour PostgreSQL. N’hésitez pas à consortingbuer au support de MySQL ou Oracle. Malheureusement, Oracle et MySQL ne prennent pas en charge le DDL transactionnel. Par conséquent, en cas d’exception, vous devez récupérer l’état de la firebase database, ce qui est la raison pour laquelle je n’ai pas pris la peine de le faire.

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-ssortingng", null, DDLColumn.DataType.TEXT, null, null, null); DDLTable table = new DDLTable(true, "test1", "Test 1", colID, colPOSITION, column1, column2); rDialect.createTable(table); 

J’ai toujours pensé que si vous utilisiez des instructions préparées pour votre code SQL, vous pourriez facilement changer le connecteur de firebase database et basculer vers une autre firebase database, dotée des connecteurs JDBC appropriés.

Nous utilisons Pentaho Data Integration (ex-Kettle) avec un certain succès, bien que les API de Community Edition soient peu documentées. Cela peut nécessiter du piratage, mais l’abstraction et les nombreuses fonctionnalités qu’il offre en valent peut-être la peine.