【问题标题】:Informix: using stored procedures in JavaInformix:在 Java 中使用存储过程
【发布时间】:2012-05-17 13:39:46
【问题描述】:

如何在 Informix 中找到存储过程的参数(函数声明)? 是“{ call sp_csq_activity }”还是“{ call sp_csq_activity(?,? ..) }”及其类型?还有这个存储函数的定义列表吗?如何使用这些函数来检索 db 中表的任何列?

public void callSP() throws SQLException {

        CallableStatement proc = null;

        proc = conn.prepareCall("{ call sp_csq_activity }");
        proc.execute();

    }

【问题讨论】:

    标签: java stored-procedures informix


    【解决方案1】:

    使用这个:select * from sysprocedures

    如本文所述:How do I list all stored procedures in Informix?

    【讨论】:

    • 我读过那篇文章,但它没有给出任何参数列表,只是程序体。我需要包含参数和返回值的函数声明。
    • 您是否也检查过 sysprocedures 以及 sysprocbody 和 sysproccolumns,如第一个答案中所述?
    • 这是我的错。我忘了看 sysproccolumns。感谢您的帮助。
    【解决方案2】:

    您也可以使用DatabaseMetaData 获取您想要的信息。

    获取所有存储过程及其参数的简单程序如下:

    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class Main {
    
        public static void main(String[] args) {
    
            try {
                Class.forName ("com.informix.jdbc.IfxDriver");
            } catch (ClassNotFoundException e) {
                System.out.println(e);
                return;
            }
    
            try {
                Connection conn = DriverManager.getConnection("jdbc:informix-sqli://.........");
    
                ResultSet rsProcs;
    
                DatabaseMetaData dbMeta = conn.getMetaData();
    
                rsProcs = dbMeta.getProcedures(null, null, null);
    
                while (rsProcs.next()) {
                    String procName = rsProcs.getString("PROCEDURE_NAME");
                    System.out.println(procName);
    
                    ResultSet rsParams = dbMeta.getProcedureColumns(null, null, procName, null);
    
                    while (rsParams.next()) {
                        System.out.println("Param " + rsParams.getString("ORDINAL_POSITION") + " :" +
                                " Name: " + rsParams.getString("COLUMN_NAME") +
                                " Type: " + rsParams.getString("COLUMN_TYPE") + 
                                " Data Type: " + rsParams.getString("DATA_TYPE"));
                    }
                    System.out.println("");
    
                    rsParams.close();
                }
                rsProcs.close();
                conn.close();
    
            } catch (SQLException e) {
                System.out.println(e);
            }
    
    
        }
    
    }
    

    检查Constant Field Values 的 java.sql.Types 部分以获取 SQL 数据类型值。

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多