我使用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
?
如果是,是否有任何文件建议相同?
答案 0 :(得分:2)
所有JDBC驱动程序都必须遵循JDBC规范和API文档,DatabaseMetaData.getProcedureColumns
的API文档指定:
检索给定目录的存储过程的描述 参数和结果列。
仅描述与架构,过程和参数名称匹配的描述 标准被退回。它们按
PROCEDURE_CAT
排序,PROCEDURE_SCHEM
,PROCEDURE_NAME
和SPECIFIC_NAME
。在此, 返回值(如果有)是第一个。接下来是参数 呼叫顺序中的描述。列描述在列中 数字顺序。
如果驱动程序不遵循此规范,那么这是驱动程序中的错误。所以一般来说,你应该能够依赖上面的描述。
否则,检查列COLUMN_TYPE
(索引5)中的值,该列指定类型(在参数,结果集列等中)和ORDINAL_POSITION
(索引18),用于描述位置(检查javadoc中的详细信息。