我使用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
吗?
如果是,是否有任何文件建议?
所有JDBC驱动程序都必须遵循JDBC规范和API文档,并且DatabaseMetaData.getProcedureColumns
的API文档指定:
检索给定目录的存储过程的描述 参数和结果列。
仅与架构,过程和参数名称匹配的描述 返回标准。它们由
PROCEDURE_CAT
订购,PROCEDURE_SCHEM
,PROCEDURE_NAME
和SPECIFIC_NAME
。在此, 返回值(如果有)是首先。下一个是参数 按呼叫顺序描述。列描述列入列 数字订单。
如果驱动程序不遵循此规范,则是驱动程序中的错误。因此,通常您应该能够依靠上述描述。
否则,检查列中的值COLUMN_TYPE
(索引5),该值指定了类型(参数,结果集列等)和ORDINAL_POSITION
(索引18)(索引18),该(索引18)描述了位置(在Javadoc中检查详细信息)。