package com.wujilin.procedure;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
public class ProcedureTest {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String username = "scott";
String password = "tiger";
String driver = "oracle.jdbc.driver.OracleDriver";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, username, password);
String sql = "{call pro(?,?,?,?,?,?)}";
CallableStatement cstmt = conn.prepareCall(sql);
// 设置表名
cstmt.setString(1, "emp");
// 设置每一页的记录数
cstmt.setInt(2, 4);
// 设置当前页
cstmt.setInt(3, 2);
// 注册总共的页数
cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
// 注册总共的记录数
cstmt.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
// 注册结果集
cstmt.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
// 直接执行:execute()方法即可。
cstmt.execute();
// 将游标强制转换成ResultSet类型。
ResultSet rs = (ResultSet) cstmt.getObject(6);
int pageCount = cstmt.getInt(4);
System.out.println("页数:" + pageCount);
int rowCount = cstmt.getInt(5);
System.out.println("记录数:" + rowCount);
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
for (int i = 0; i < rsmd.getColumnCount(); i++) {
System.out.print(rsmd.getColumnLabel(i + 1) + ":" + rs.getObject(i + 1) + ", ");
}
System.out.println();
}
} catch (Exception e) {
}
}
}