DatabaseMetaData getProcedureColumns存储过程列名称顺序?

时间:2017-09-23 10:33:54

标签: sql-server jdbc mssql-jdbc callable-statement database-metadata

我使用databasemetadata来获取SQL Server上存储过程的列(读取参数):

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();
}

getProcedureColumns()是否按顺序返回过程列?这意味着如果在数据库中存储过程参数是abc(@a int,@b int,@c int),我是否总是以有序的方式得到@a, @b and @c

如果是,是否有任何文件建议相同?

1 个答案:

答案 0 :(得分:2)

所有JDBC驱动程序都必须遵循JDBC规范和API文档,DatabaseMetaData.getProcedureColumns的API文档指定:

  

检索给定目录的存储过程的描述   参数和结果列。

     

仅描述与架构,过程和参数名称匹配的描述   标准被退回。它们按PROCEDURE_CAT排序,   PROCEDURE_SCHEMPROCEDURE_NAMESPECIFIC_NAME。在此,   返回值(如果有)是第一个。接下来是参数   呼叫顺序中的描述。列描述在列中   数字顺序。

如果驱动程序不遵循此规范,那么这是驱动程序中的错误。所以一般来说,你应该能够依赖上面的描述。

否则,检查列COLUMN_TYPE(索引5)中的值,该列指定类型(在参数,结果集列等中)和ORDINAL_POSITION(索引18),用于描述位置(检查javadoc中的详细信息。