2017-02-27 2 views
0

Existe-t-il un moyen de lister les vues définies par l'utilisateur seules. Dans MSSQL, lorsque j'ai essayé de lister les tables et les vues en utilisant la fonction getTables() de DatabaseMetadata de jdbc, il affiche toutes les vues. Mais je n'ai pas besoin de vues système dans mon jeu de résultats.Répertorie les vues définies par l'utilisateur à partir de la base de données

DatabaseMetadata dmd = connection.getMetaData(); 
tablesResultSet= dmd.getTables(dbName, null, null, new String[] { "TABLE", "VIEW" }); 

Ceci est le code que j'utilise pour extraire des métadonnées. Quelqu'un peut-il m'aider à résoudre ce problème?

Répondre

2

Vous pouvez demander à la base de données directement avec un SELECT appel et d'analyser le résultat:

SELECT * FROM sys.objects WHERE [type]='V' AND is_ms_shipped=0 

[type]='V' filtrera pour VIEW s et is_ms_shipped=0 filtrera pour les objets qui sont créés par les utilisateurs (ne sont pas installés à partir de MS)

Find details here

+0

cela fonctionnera-t-il seulement pour MSSQL? – abubakkar

+2

@abubakkar - 'SELECT TABLE_NAME COMME VIEW_NAME FROM [INFORMATION_SCHEMA]. [VIEWS]' pourrait être un peu plus portable. –

0

Vous devez prendre le schéma en considération. Le schéma par défaut sur MS SQL est dbo. Donc, votre appel aux métadonnées doit être:

DatabaseMetadata dmd = connection.getMetaData(); 
tablesResultSet= dmd.getTables(dbName, "dbo", null, new String[] { "VIEW" }); 

Ou vous obtenez tous avant par Schemas

dmd.getSchemas(dbName,"%"); 

Et puis boucle tous vos schémas de travail « ».

+0

cela fonctionnera-t-il pour mysql et oracle? – abubakkar

+0

Oui, sauf que le schéma par défaut peut avoir un nom différent. –

+0

Dans le schéma MySQL n'est pas commun, car il est contenu dans la base de données. Donc, vous n'utilisez que le '%' comme nom de schéma dans MySQL. –