调用oracle包中包含的程序

时间:2013-12-04 14:50:31

标签: java oracle stored-procedures

我在我的Oracle数据库中创建了一个包,其中包含几个程序,现在我想从java程序中调用程序,需要两个输入参数并且不返回任何内容。

请帮我这样做,我一直使用以下连接来连接数据库:

String i =username.getText(); 
String j =psswd.getText();
String k = sid.getText();
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@ora211g.home.com:1654:ora11g",username,password);
st =  con.createStatement();
rs =st.executeQuery("SELECT DISTINCT SUBJECT_AREA FROM REP_SUBJECT");

这个东西工作正常,现在如何通过传递一些参数(比如两个字符串值)来调用过程

4 个答案:

答案 0 :(得分:0)

这篇有用的博客文章将为您提供帮助

http://jameajudo.blogspot.com.br/2009/03/call-procedure-oracle-with-java-and.html

他使用的例子是:

String command = "{call SALDOS(?,?)}"; 
CallableStatement cstmt = con.prepareCall (command);
cstmt.registerOutParameter(2, Types.DECIMAL);

cstmt.execute();

答案 1 :(得分:0)

2这就是你想要的

st =  con.prepareStatement("SELECT DISTINCT SUBJECT_AREA FROM REP_SUBJECT WHERE A = ? AND B = ?");
st.setString(1, "val1");
st.setString(2, "val2");
rs =st.executeQuery();

答案 2 :(得分:0)

使用con.prepareCall()

然后使用返回的CallableStatement对象来设置参数和执行。

答案 3 :(得分:0)

在这里,我得到了我的问题的解决方案,因此想到将其发布在这里,以便每个人都能详细了解:

     Connection con = null;
       ResultSet rs = null;
       Statement st = null;
    Class.forName = Class.forName("oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection( "jdbc:oracle:thin:@host:port:SID);

CallableStatement csmt = con.prepareCall("{call PACKAGE_NAME.PROCEDURE_NAME(?,?,?,?)}");
                        csmt.setString(1,"abc");
                        csmt.setString(2,"def");
                        csmt.setString(3,"ghi");
                        csmt.registerOutParameter(4,java.sql.Types.VARCHAR);
                        csmt.execute();
                        String message =csmt.getString(4);

这里'?'表示过程中输入和输出参数的数量。我有3个输入和1个输出参数所以'?'的数量在程序中是4。

索引从1,2,3开始......

我的前三个输入参数是一个字符串,所以我使用:

将它们传递给过程
                            csmt.setString(1,"abc");
                            csmt.setString(2,"def");
                            csmt.setString(3,"ghi");

我的Procedure返回字符串,所以为了在java中首先获得接收,我必须注册out参数,所以我使用了相同的方法:

csmt.registerOutParameter(4,java.sql.Types.VARCHAR); /*4 becuase out parameter is 4th*/

然后我执行了可调用语句,之后我收到了从程序返回到

String message = csmt.getString(4);

享受..... \ M /