2

J'utilise DatabaseMetaData pour obtenir des colonnes (lire les paramètres) d'une procédure stockée sur le serveur SQL:DatabaseMetaData getProcedureColumns ordre de noms de colonne de procédure stockée?

Connection connection = getConnection(); //getting the connection - 
DatabaseMetaData dbMetaData = connection.getMetaData(); 

HashMap<String, Integer> paramInfo = new HashMap<String, Integer>(); 
if (dbMetaData != null){ 
    ResultSet rs = dbMetaData.getProcedureColumns (null, null, sp_name.toUpperCase(), "%"); 
    while (rs.next()) 
     paramInfo.put(rs.getString(4), rs.getInt(6)); 
    rs.close(); 
} 

-t-getProcedureColumns() retourner les colonnes de la procédure d'une manière ordonnée? Signification si dans la base de données les paramètres de procédure stockée sont-abc(@a int,@b int,@c int), aurais-je toujours @a, @b and @c d'une manière ordonnée?

Si oui, y a-t-il des documents pour suggérer la même chose?

Répondre

2

Tous les pilotes JDBC doivent suivre la spécification JDBC et la documentation API et la documentation de l'API de DatabaseMetaData.getProcedureColumns précise:

Récupère une description du paramètre procédure de catalogue donné stockées et les colonnes résultat.

Seules les descriptions correspondant aux critères de schéma, de procédure et de nom de paramètre sont renvoyées. Ils sont classés par PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME et SPECIFIC_NAME. Dans ce cas, la valeur de retour, le cas échéant, est la première. Viennent ensuite les descriptions du paramètre dans l'ordre d'appel. Les descriptions des colonnes suivent dans la colonne l'ordre des numéros.

Si un pilote ne suit pas cette spécification, il s'agit d'un bogue dans le pilote. Donc, en général, vous devriez pouvoir compter sur la description ci-dessus.

Dans le cas contraire, vérifier les valeurs dans les colonnes COLUMN_TYPE (indice 5) qui spécifie le type (en paramètre, entraîner colonne définie, etc.) et ORDINAL_POSITION (indice 18), qui décrit la position (voir les détails dans le javadoc).

+1

En outre, le code source 'SQLServerDatabaseMetaData # getProcedureColumns' indique qu'il appelle la procédure stockée système SQL Server' sp_sproc_columns', dont [documentation] (https://docs.microsoft.com/en-us/sql/relational- database/system-stored-procedures/sp-sproc-columns-transact-sql) indique que "les résultats retournés sont classés par PROCEDURE_QUALIFIER, PROCEDURE_OWNER, PROCEDURE_NAME, et l'ordre dans lequel les paramètres apparaissent dans la définition de la procédure." –