J'ai une console d'administration dans mon application Web qui permet à un administrateur d'effectuer une requête SQL SELECT personnalisée sur notre base de données.
En dessous, l'application utilise Hibernate, mais ces requêtes ne sont pas HQL, elles sont purement SQL. J'utilise donc une requête native comme celle-ci:
protected EntityManager em;
public List<Object[]> execute(String query) {
Query q = em.createNativeQuery(query);
List<Object[]> result = q.getResultList();
return result;
}
Cela fonctionne correctement, mais ne renvoie que les lignes de données, sans informations supplémentaires. Ce que je voudrais, c'est aussi obtenir les noms des colonnes. Ainsi, lorsque j'imprime les résultats à l'utilisateur, je peux aussi imprimer un en-tête pour montrer quelles sont les différentes colonnes.
Y a-t-il un moyen de faire ça?
Après une longue période sans réponse et sur la base de mes propres recherches, il semble que cela ne puisse malheureusement pas être fait.
J'ai également rencontré un problème similaire en travaillant avec JPA. JPA ne dispose d'aucun moyen direct d'accéder aux métadonnées de l'ensemble de résultats. La solution peut être d’extraire les noms de colonne de la requête elle-même ou d’utiliser JDBC pour obtenir les métadonnées.
Si le fournisseur JPA ne prend pas en charge la récupération des métadonnées de requête, une autre solution pourrait consister à utiliser un analyseur syntaxique SQL tel que JSQLParser , ZQL ou Analyseur SQL général (commercial) extrait les champs de l'instruction SELECT
.