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 中使用存储过程的主要内容,如果未能解决你的问题,请参考以下文章