Informix:在 Java 中使用存储过程

Posted

技术标签:

【中文标题】Informix:在 Java 中使用存储过程【英文标题】:Informix: using stored procedures in 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();

    

【问题讨论】:

【参考方案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 数据类型值。

【讨论】:

以上是关于Informix:在 Java 中使用存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Informix 存储过程通用异常处理

如何在 Informix 中正确输入存储过程参数?

Informix,在存储过程中初始化变量

在 Informix 中创建 TEMP 存储过程

Informix:如何将单个参数中的多个值传递、使用和执行到存储过程

informix 存储过程详解