
Dans cet article, je parlerai d'un outil pour trouver rapidement des lignes dans une base de données et les parcourir. Si vous travaillez dans le support et que vous devez faire beaucoup de requêtes de base de données, si vous en avez assez d'écrire des SELECT, s'il vous plaît, sous cat.
La motivation
Il y a quelque temps, j'ai aidé à maintenir un grand système comptable. Au cours des travaux, il a été nécessaire de rechercher des informations sur la base de données. Scénario typique: un utilisateur ayant un problème appelle sur demande N1. Pour les diagnostics, vous devez afficher certaines données sur cette application dans la base de données. Nous répondons à la demande:
SQL SELECT * FROM ORDER WHERE ID = 'N1'
L'unité est associée à l'application, par conséquent, nous effectuons la demande suivante pour obtenir des informations sur l'unité:
SQL SELECT * FROM DEVICE WHERE ORDER_ID = 'N1'
Ensuite, nous recherchons toutes les applications liées à l'unité:
SQL SELECT * FROM ORDERS WHERE DEVICEID = '92375'
Et ainsi de suite. Après avoir exécuté N requêtes, tôt ou tard, nous trouverons un problème dans les données et prendrons des mesures. Les inconvénients de cette approche sont évidents:
- L'écriture manuelle de requêtes est lente et peu pratique. Surtout si la structure de la base de données est complexe et qu'il existe de nombreuses tables. Il est donc possible de modifier le syndrome du tunnel.
- Lorsque vous devez trouver une ligne associée par contrainte Unique ou Clé étrangère, vous devez écrire une nouvelle requête.
- En règle générale, les outils de base de données affichent les données sous forme de tableau. Lorsqu'il y a plusieurs colonnes dans le tableau, vous devez faire défiler le tableau horizontalement ou sélectionner des colonnes dans la requête. Encore une fois, un travail manuel est nécessaire.
Idée
Vous devez d'abord simplifier la recherche. Cette action doit être effectuée avec un minimum de clics. Entrez simplement la ligne souhaitée dans la zone de texte et appuyez sur Entrée. Les clés primaires sont généralement indexées, vous pouvez donc rechercher une valeur immédiatement dans toutes les colonnes incluses dans les clés primaires ou les contraintes uniques.
Ensuite, vous devez résoudre le problème de navigation. Comment passer rapidement à une entrée associée sur une clé étrangère? Vous pouvez imaginer une base de données comme un système de fichiers: imaginez qu'une ligne de base de données est un répertoire, une ligne associée par une clé étrangère est un lien symbolique et un champ qui n'est pas une clé étrangère est un simple fichier. Je ne vais pas écrire un pilote de système de fichiers, c'est juste une analogie. Ainsi, les lignes de base de données peuvent être représentées comme une structure hiérarchique, qui peut être affichée à l'aide du composant TreeTable.
Vous pouvez également ajouter une colonne au composant TreeTable, dans laquelle une valeur significative pour une ligne donnée sera affichée. Cette valeur peut être obtenue en concaténant les valeurs des champs de ligne de la base de données. Par exemple, pour une ligne de commande, vous pouvez créer une expression:
ORDER_NAME + ', ' + ORDER_STATUS + ', ' + ORDER_CUSTOMER
Analogie la plus proche: méthode toString () en java.
Implémentation
La programmation a pris plusieurs mois. Au début, j'ai essayé d'utiliser C ++ et Qt, mais cela s'est avéré difficile: dans le monde C ++, il n'y a rien de similaire aux pilotes jdbc et le langage lui-même est beaucoup plus compliqué. Par conséquent, l'application est écrite en Java.

Dans la capture d'écran, nous voyons la zone de recherche, la zone de liste déroulante pour commuter la connexion actuelle et le composant TreeTable, qui affiche des données hiérarchiques.
Chercher
Vous pouvez saisir une chaîne dans la zone de texte et appuyer sur Entrée. La recherche ne fonctionne désormais que sur les colonnes de type chaîne et numérique: VARCHAR, NUMBER, etc. Les types de date et d'heure ne sont pas encore pris en charge. Par défaut, l'outil recherche les valeurs dans les colonnes incluses dans la clé primaire. Dans les paramètres, vous pouvez cocher les autres champs qui seront utilisés dans la recherche.
Navigation par touches
Les nœuds étiquetés [F] sont la clé étrangère. Dans la colonne Table, nous voyons le nom de la table à laquelle cette clé fait référence. Après avoir ouvert le nœud, nous passons à la ligne associée. Les clés étrangères composées sont également prises en charge.
Les nœuds étiquetés [U] sont Contrainte unique ou Clé primaire. Après avoir développé le nœud, vous pouvez accéder aux lignes associées. Jetez un œil à la capture d'écran:

Nous avons entré la valeur 10248 dans la barre de recherche et trouvé une ligne dans la table ORDERS. Nous avons ouvert le nœud [U] ORDER_ID et trouvé 3 lignes dans la table ORDER_DETAILS. Vous pouvez ensuite développer chaque nœud et accéder aux lignes de la table ORDER_DETAILS.
Chaîne de colonne
Les valeurs de clé primaire sont souvent non informatives. Dans la capture d'écran précédente, nous voyons les valeurs ORDER_ID = 10248, PRODUCT_ID = 11. Ces chiffres ne nous disent rien. Pour les humaniser d'une manière ou d'une autre, vous pouvez faire une expression:
'Product: ' + PRODUCT_ID.PRODUCT_NAME + ', Price: ' + UNIT_PRICE
et entrez-le dans la cellule de la colonne Chaîne:

Appuyez sur Entrée et voyez des valeurs plus significatives:

Détails techniques
L'application est écrite en Java, une interface en JavaFX. Vous pouvez remarquer que TreeTable utilise les chaînes "[U]" et "[F]" au lieu d'icônes, cela a été fait en raison de ce bogue ennuyeux:
JDK-8190331 . Les mots de passe de la base de données sont stockés dans un référentiel sécurisé à l'aide de la bibliothèque
java-keyring . OpenJDK 13 et
jpackage de build à accès
anticipé sont utilisés pour construire des
installateurs . Les commandes de build peuvent être trouvées
ici .
Les bases de données Oracle, MariaDB et PostgreSQL sont désormais prises en charge.
Les références
Page du projet sur github:
db-tree-fxSi vous trouvez une erreur ou si vous avez besoin d'ajouter quelque chose, n'hésitez pas à démarrer le problème ou à écrire directement sur le mail:
db.tree.app@gmail.com .
Packages d'installation
Rpm pour GNU / Linux:
db-tree-0.0.2-1.x86_64.rpmDeb pour GNU / Linux:
db-tree_0.0.2-1_amd64.debDmg signé pour macOS:
db-tree-0.0.2.dmgMsi signé pour Windows:
db-tree-0.0.2.msi
La dernière version peut être trouvée sur
github