[英]Call procedure included in oracle package
我已经在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");
这件事工作正常,现在我如何通过传递一些参数(例如两个字符串值)来调用过程
这篇有用的博客文章将为您提供帮助
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();
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();
然后使用返回的CallableStatement
对象设置参数和执行。
在这里,我得到了问题的解决方案,因此想到了将其发布在这里,以便每个人都可以详细了解:
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");
我的过程返回字符串,所以为了首先在Java中接收到它,我必须注册out参数,所以我使用以下命令做了同样的事情:
csmt.registerOutParameter(4,java.sql.Types.VARCHAR); /*4 becuase out parameter is 4th*/
然后我执行了可调用语句,然后我收到了从过程返回到
字符串消息= csmt.getString(4);
享受..... \\ M /
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.