2

:DatabaseMetaData getProcedureColumns 저장 프로 시저 열 이름 순서? 내가 SQL 서버에 저장 프로 시저의 열 (읽기 매개 변수)를 얻기 위해 DatabaseMetaData의 사용

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을 순서대로 사용합니까?

예인 경우 동일한 제안을하는 문서가 있습니까?

답변

2

모든 JDBC 드라이버는 JDBC 스펙 및 API 문서를 준수해야하고, DatabaseMetaData.getProcedureColumns의 API 문서가 지정됩니다

는, 카탈로그의 저장 프로 시저 매개 변수와 결과 열에 관한 기술을 가져옵니다.

스키마, 프로 시저 및 매개 변수 이름 기준과 일치하는 설명 만 반환됩니다. 그들은 PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAMESPECIFIC_NAME에 의해 주문됩니다. 이 내에서 반환 값이 있으면 그 값이 첫 번째 값입니다. 다음은 호출 순서의 매개 변수 설명입니다. 열 설명은 번호 순서 열에 있습니다.

드라이버가이 사양을 따르지 않으면 드라이버의 버그입니다. 그래서 일반적으로 위의 설명에 의존 할 수 있어야합니다.

그렇지 않으면 매개 변수, 결과 집합 열 등의 유형을 지정하는 COLUMN_TYPE 열 (인덱스 5)의 값과 위치를 설명하는 ORDINAL_POSITION (인덱스 18)의 값을 확인하십시오 (javadoc의 세부 정보 확인).

+1

또한 SQLServerDatabaseMetaData # getProcedureColumns 소스 코드는 SQL Server 시스템 저장 프로 시저'sp_sproc_columns'를 호출하는 것으로 밝혀졌습니다.이 프로 시저의 [documentation] (https://docs.microsoft.com/en-us/sql/relational- 데이터베이스/시스템 저장 프로 시저/sp-sproc-columns-transact-sql)는 "반환 된 결과는 PROCEDURE_QUALIFIER, PROCEDURE_OWNER, PROCEDURE_NAME 및 프로 시저 정의에 매개 변수가 나타나는 순서에 따라 정렬됩니다." –

관련 문제