读书人

在java施行Oracle存储过程

发布时间: 2013-03-26 21:09:07 作者: rapoo

在java执行Oracle存储过程

?在java执行Oracle存储过程
摘自:http://abu.tw/2008/07/java-oracle-stored-procedure-function.html

Oracle Stored Procedure Function 有最大的相就是,Oracle Function 必/一定有 Return 值,行後就把 Return 值出,Return 值可以是任何的 Type,甚至是 Oracle Object Type 都是可行的。而 Oracle Stored Procedure,由的 IN/OUT 性定/控制的出入方向,所以或它根本不 Return 任何的西出,只有的呼叫行。

一 Oracle Stored Procedure / Function 可能有任何的(parameters), 也可能需要入(IN parameters),或也有出(OUT parameters),也或身兼入出的性(IN/OUT parameters)。 Oracle 性的相知特性,有再行介。

在 Java 中叫用的候,大概只要搞得清楚是去的是出的,就足了。

??Oracle 料及 Java API CallableStatement
??在 Java 中呼叫 Stored Procedure
??在 Java 中呼叫 Oracle Function
Oracle 料及 Java API CallableStatement
1.?在 Java 中 Oracle 料:
很基本,基本到我不文它,就在道一下就好。
1.?Connection connection = null;?
2.?try {?
3.?? // 入 JDBC driver?
4.?? Class.forName("oracle.jdbc.driver.OracleDriver");?
5.??
6.?? // 到料?
7.?? String dbHost = "127.0.0.1";?
8.?? String dbPort = "1521";?
9.?? String dbSID? = "oraSID";?
10.?? String dbUser = "username";?
11.?? String dbPswd = "password";?
12.?? connection = DriverManager.getConnection("jdbc:oracle:thin:@" + dbHost + ":" + dbPort + ":" + dbSID, dbUser, dbPswd);?
13.?} catch (ClassNotFoundException e) {?
14.?? // 找不到 JDBC Driver?
15.?} catch (SQLException e) {?
16.?? // 法 Oracle 料?
17.?}
如果,你的是去哪下 JDBC Driver ,可以看看。

1.?Java API CallableStatement:
的要角是 CallableStatement,如果想先一下 API,可以考。
大概先下些『功心法』就用了:
用 connectionInstance.prepareCall 定 CallableStatement
callableStatementInstance = connectionInstance.prepareCall("{叫用的 SQL 指令}");

只要含有 OUT 性的,用 CallableStatement.registerOutParameter 定
所含 OUT 性者包含了 OUT, IN/OUT 及 Oracle Function 的 Return 值。
callableStatementInstance.registerOutParameter (Index, TypeConstant);

只要含有 IN 性的,用 CallableStatement.setDataType 定
至於有哪 DataType 可以使用, API reference。

callableStatementInstance.setDataType(Index, 入值);

只要含有 OUT 性的,用 CallableStatement.getDataType 取值
至於有哪 DataType 可以使用, API reference。
String outValue = callableStatementInstance.getDataType(Index);

在 Java 中呼叫 Stored Procedure:
呼叫有有任何的的 Oracle Stored Procedure:
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{call myproc}");?
5.??
6.?? // 行 CallableStatement?
7.?? cs.execute();?
8.?} catch (SQLException e) {?
9.?}?
呼叫有一 IN 的 Oracle Stored Procedure:
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{call myprocin(?)}");?
5.??
6.?? // 定 IN 的 Index 及值?
7.?? cs.setString(1, "入的字串");?
8.??
9.?? // 行 CallableStatement?
10.?? cs.execute();?
11.?} catch (SQLException e) {?
12.?}?
呼叫有一 OUT 的 Oracle Stored Procedure:
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{call myprocout(?)}");?
5.??
6.?? // 定 OUT 的 Index 型?
7.?? cs.registerOutParameter(1, Types.VARCHAR);?
8.??
9.?? // 行取回 OUT 值?
10.?? cs.execute();?
11.?? String outParam = cs.getString(1);??? // OUT 值?
12.?} catch (SQLException e) {?
13.?}
呼叫有一 IN/OUT 的 Oracle Stored Procedure:
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{call myprocinout(?)}");?
5.??
6.?? // 定 IN/OUT 的 Index 型?
7.?? cs.registerOutParameter(1, Types.VARCHAR);?
8.??
9.?? // 定 IN/OUT 的 Index 及值?
10.?? cs.setString(1, "入的字串");?
11.??
12.?? // 行取回 IN/OUT 值?
13.?? cs.execute();?
14.?? String outParam = cs.getString(1);?????????? // IN/OUT 值?
15.?} catch (SQLException e) {?
16.?}?
在 Java 中呼叫 Oracle Function:

呼叫有有任何的的 Oracle Function (Return VARCHAR):
1.?view plaincopy to clipboardprint?
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{? = call myfunc}");?
5.??
6.?? // 定 Return 值的 Index 型?
7.?? cs.registerOutParameter(1, Types.VARCHAR);?
8.??
9.?? // 行取回 Return 值?
10.?? cs.execute();?
11.?? String retValue = cs.getString(1);?
12.?} catch (SQLException e) {?
13.?}?
呼叫有一 IN 的 Oracle Function (Return VARCHAR):
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{? = call myfuncin(?)}");?
5.??
6.?? // 定 Return 值的 Index 型?
7.?? cs.registerOutParameter(1, Types.VARCHAR);?
8.??
9.?? // 定 IN 的 Index 及值?
10.?? cs.setString(2, "入的字串");?
11.??
12.?? // 行取回 Return 值?
13.?? cs.execute();?
14.?? String retValue = cs.getString(1);?
15.?} catch (SQLException e) {?
16.?}?
呼叫有一 OUT 的 Oracle Function (Return VARCHAR):
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{? = call myfuncout(?)}");?
5.??
6.?? // 定 Return 值, 及 OUT 的 Index 型?
7.?? cs.registerOutParameter(1, Types.VARCHAR);?
8.?? cs.registerOutParameter(2, Types.VARCHAR);?
9.??
10.?? // 行取回 Return 值及 OUT 值?
11.?? cs.execute();?
12.?? String retValue = cs.getString(1);??? // Return 值?
13.?? String outParam = cs.getString(2);??? // OUT 值??
14.?} catch (SQLException e) {?
15.?}
呼叫有一 IN/OUT 的 Oracle Function (Return VARCHAR):
1.?CallableStatement cs;?
2.?try {?
3.?? // 定 CallableStatement?
4.?? cs = connection.prepareCall("{? = call myfuncinout(?)}");?
5.??
6.?? // 定 Return 值, 及 IN/OUT 的 Index 型?
7.?? cs.registerOutParameter(1, Types.VARCHAR);?
8.?? cs.registerOutParameter(2, Types.VARCHAR);?
9.??
10.?? // 定 IN/OUT 的 Index 及值?
11.?? cs.setString(2, "入的字串");?
12.??
13.?? // 行取回 Return 值及 IN/OUT 值?
14.?? cs.execute();?
15.?? String retValue = cs.getString(1);??? // Return 值?
16.?? String outParam = cs.getString(2);??? // IN/OUT 值?
17.?} catch (SQLException e) {?
18.?}?

?


我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html

读书人网 >软件架构设计

热点推荐