7
votes

Un analyseur de schéma MySQL en Java?

Est-ce que quelqu'un sait s'il existe une bibliothèque Java pour l'analyse d'un schéma MySQL? Dans le code, je veux pouvoir déterminer les tables et les champs spécifiés dans un schéma. Ou aurais-je besoin d'écrire le mien?

Merci Richard.

EDIT: Voulez-vous simplement éviter de réinventer inutilement la roue inutilement :)


2 commentaires

Selon ce que vous en avez besoin, il peut y avoir un moyen de le faire de manière assez simple. Alors, quelle sera l'application de cela? Sinon, jetez un coup d'œil à Stackoverflow.com/questions/660609/ SQL-Parser-Bibliothèque-for-Ja VA


@bobah - OK Oui Stackoverflow.com/Questtions/660609/ SQL-Parser-Library-for-Ja VA a la réponse - JSQLPARSER. Merci


3 Réponses :


1
votes

Pourquoi ne pas simplement utiliser DatabasemetaData pour connaître les tables et les colonnes? Cela suppose que le schéma exprimé en SQL a été exécuté contre la base de données que vous êtes connecté, mais ce n'est pas une hypothèse difficile à satisfaire.

MySQL pourrait être capable de simplement importer les données si vous avez les données au format CSV. Je voudrais creuser plus profondément dans les outils MySQL avant d'écrire un code Java pour faire une telle chose. Si cela ne fonctionne pas, je trouverais un outil ETL pour m'aider. Écrire Java serait ma solution de dernier recours.


3 commentaires

Malheureusement, ce code est (actuellement) étant exécuté avant la construction de la base de données. Cependant, je pourrais peut-être changer l'ordre des choses, alors merci pour le conseil


À moins que votre code Java ne doit créer la base de données (et cela ne devrait pas), je ne crois pas que vous devriez analyser le SQL DDL.


Non, ça ne crée pas la dB. Ce qu'il fait est de créer un fichier pour l'importation de DB avec les colonnes définies dans le schéma, les valeurs extraites à partir d'un fichier de données source contenant ces colonnes plus un tas d'autres personnes dans une commande non statique.



4
votes

Répondre à ma propre question:

am utilise jsqlparser http://jsqlparser.sourceforge.net/

Ceci analyse des déclarations individuelles, pas plusieurs déclarations telles que trouvées dans un schéma. Donc, diviser le schéma sur ';'. Cela n'aime pas non plus le caractère '`', donc ceux-ci doivent être dépouillés. Code pour obtenir des noms de colonnes pour une table particulière: xxx


1 commentaires

Il semble que JSQL analgésique ne soit plus maintenu à cette adresse. La version sur github [ GITUB.COM/JSQLPARSER/JSQLPARSER] est plus à jour et est maintenant publié chez oss.sonatype.org/content/groups / public / com / github / jsqlparser / ...



3
votes

Vous voudrez peut-être envisager d'utiliser le code de Alibaba's Druid Project . Bien que conçu comme une bibliothèque de pooling de connexion sophistiquée, ce projet prend en charge un analyser et ast pour les dialectes ANSI SQL et non ANSI telles que MySQL, Oracle, SQL Server, etc. Le projet est open source et porte la licence de licence Apache très libérale version 2.0.

Les principaux points d'entrée dans cette partie de la bibliothèque sont sqlutils.java . Vous pouvez utiliser des valeurs renvoyées à partir de sqlutils.parSestatifs pour accéder à un modèle dactylographié des instructions: xxx


0 commentaires