sql-server - DatabaseMetaData getProcedureColumns 存储过程列名顺序?

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

我使用数据库元数据获取 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 和@c以有序的方式?

如果是,是否有任何文档可以提供相同的建议?

最佳答案

所有JDBC驱动都需要遵循JDBC规范和API文档,以及DatabaseMetaData.getProcedureColumns的API文档指定:

Retrieves a description of the given catalog's stored procedure parameter and result columns.

Only descriptions matching the schema, procedure and parameter name criteria are returned. They are ordered by PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value, if any, is first. Next are the parameter descriptions in call order. The column descriptions follow in column number order.

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

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

关于sql-server - DatabaseMetaData getProcedureColumns 存储过程列名顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46378635/

相关文章:

sql - CASE vs IF-ELSE-IF vs GOTO 关键字

sql - 如何在插入期间使用标识作为列值

java - 我应该如何使用jdbc将vararray从plsql发送到java?

c# - 插入记录后如何从SQL Server获取标识值

sql - 在 Case 语句中使用多个条件

spring-boot - Spring Boot中的MS SQL Server数据源Java配置

sql-server - Linux 上的 MS SQL Server : set password using script

java - LocalDateTime 和 SQL Server JDBC 4.2 驱动程序

java - 如何在 JDBC 中获取自定义 Oracle 类型中的对象名称

java.lang.ClassNotFoundException : at jdbc. DatabaseAccess.doGet(DatabaseAccess.java:25)