getProcedure 和 getFunctions 返回相同的 ResultSet



我正在尝试通过java删除数据库中的所有函数和过程。我当前的代码是这样的:

        Class.forName(driver);
        Connection conn = getConnectionToDB();
        String itemName;
        ResultSet rs = getResultSetForItem(item);
        String upperCaseItem = item.toUpperCase();
        while (rs.next()) {
            itemName = rs.getString(upperCaseItem + "_NAME");
            // Procedure and function names come with a grouping ID, remove it
            if (item.equals("procedure") || item.equals("function"))
                itemName = itemName.substring(0, itemName.indexOf(";"));
            stmt = conn.createStatement();
            stmt.executeUpdate(query + " " + itemName);
        }

其中项目曾经是"功能",曾经是"过程"。此外,查询变量被正确设置为与执行相关的"DROP FUNCTION"或"DROP PROCEDURE"。

getResuletSetForItem 的方法:

        Class.forName(driver);
        Connection conn = getConnectionToDB();
        DatabaseMetaData md = conn.getMetaData();
        switch (item.toLowerCase()){
            case "function":
                rs = md.getFunctions("LDMS", "dbo", "%");
                break;
            case "procedure":
                rs = md.getProcedures("LDMS", "dbo", "%");
                break;
        }
        return rs;

发生的情况是,我根据我的要求将结果集作为函数或过程。但它也返回另一种类型的记录(意思是,如果我要求函数的 ResultSet,我也会收到过程(。

当然会导致异常,例如,当我尝试执行"DROP FUNCTION X",其中 X 实际上是一个存储过程。

虽然你没有明确这么说,但看起来你可能正在使用适用于Java的MS SQL Server驱动程序。

从文档中看,getFunctionsgetProcedures 方法都返回函数和过程的列表。您需要评估FUNCTION_TYPE列以确定哪个是哪个。

函数的类型。它可以是以下值之一:

SQL_PT_UNKNOWN (0(

SQL_PT_PROCEDURE (1(

SQL_PT_FUNCTION (2(

相关内容

  • 没有找到相关文章

最新更新