存储过程:
Package Head:
CREATE OR REPLACE PACKAGE TEST IS
--返回cursor
TYPE CURSOR_RESULT IS REF CURSOR;
PROCEDURE GET_CURSOR_RESULT(P_STARTINDEX IN INT,
P_LIMIT IN INT,
P_DEAL_TYPE IN VARCHAR2,
CR OUT CURSOR_RESULT);
END TEST;
Package Body:
CREATE OR REPLACE PACKAGE BODY TEST IS
PROCEDURE GET_CURSOR_RESULT(P_STARTINDEX IN INT,
P_LIMIT IN INT,
P_DEAL_TYPE IN VARCHAR2,
CR OUT CURSOR_RESULT) IS
BEGIN
OPEN CR FOR
SELECT T.*
FROM (SELECT SDD.ID, SDD.FCU, SDD.FCD, ROWNUM RN
FROM SDDTEST SDD
WHERE DEAL_TYPE = P_DEAL_TYPE) T
WHERE T.RN >= P_STARTINDEX
AND T.RN < P_STARTINDEX + P_LIMIT;
END GET_CURSOR_RESULT;
END TEST;
Java代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBUtil {
private static String DB_CONNECT_STR = "jdbc:oracle:thin:@10.25.18.29:1593:test";
private static String DB_USER = "scott";
private static String DB_PASS = "tiger";
public static DBUtil dbUtil = new DBUtil();
private Connection con = null;
private DBUtil() {
try {
// 推荐使用这个驱动,不推荐oracle.jdbc.driver.OracleDriver
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConnection() throws SQLException {
if (con == null)
con = DriverManager.getConnection(DB_CONNECT_STR,DB_USER,DB_PASS);
return con;
}
}
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import oracle.jdbc.OracleCallableStatement;
/**
* 1.java中获取Oracle存储过程返回的Cursor。
* @author QCD
*
*/
public class OracleCursorResultTest {
/**
* @param args
*/
public static void main(String[] args) {
Connection con = null;
OracleCallableStatement ocs = null;
ResultSet rs = null;
String sql = "{call test.GET_CURSOR_RESULT(?,?,?,?)}";
try {
con = DBUtil.dbUtil.getConnection();
ocs = (OracleCallableStatement) con.prepareCall(sql);
ocs.setInt(1, 10);
ocs.setInt(2, 20);
ocs.setString(3, "01");
ocs.registerOutParameter(4,oracle.jdbc.OracleTypes.CURSOR);
ocs.execute();
rs = ocs.getCursor(4);
while (rs.next()) {
String tradeno = rs.getString("id");
String fcu = rs.getString("fcu");
Date fcd = rs.getDate("fcd");
System.out.println("tradeno:" + tradeno + ",fcu:" + fcu + ",fcd:" + fcd);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if(rs!=null)rs.close();
if(ocs!=null)ocs.close();
if(con!=null)con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
注:使用ojdbc6.jar,此版本支持JDK6,支持JDBC 4.0。