📄 spcursors.java
字号:
//声明本类包含在包examples.jdbc.oracle中
package examples.jdbc.oracle;
//声明本类要引入的其他包和类
import java.sql.*;
import java.util.Properties;
/**
* 这类光标支持只存在于Oracle 7.2及以后版本,在文件"spcursors.sql"中的PL/SQL定义了这些存储过程
*/
public class spcursors {
public static void main(String[] argv)
{
//声明连接和结果集变量
java.sql.Connection conn = null;
java.sql.ResultSet rs = null;
java.sql.ResultSet rs1 = null;
java.sql.ResultSet rs2 = null;
java.sql.ResultSet rs3 = null;
//声明weblogic SQL语句变量
weblogic.jdbc.common.OracleCallableStatement cstmt = null;
weblogic.jdbc.common.OracleCallableStatement cstmt2 = null;
weblogic.jdbc.common.OracleCallableStatement cstmt3 = null;
try {
//声明属性对象并赋值
Properties props = new Properties();
props.put("user","scott");
props.put("password","tiger");
props.put("server","DEMO");
//加载驱动程序
Driver myDriver = (Driver)
Class.forName("weblogic.jdbc.oci.Driver").newInstance();
//连接数据库
conn = myDriver.connect("jdbc:weblogic:oracle", props);
// 这里我们使用支持Oracle光标绑定的WebLogic扩展。
//weblogic SQL语句变量
cstmt =
(weblogic.jdbc.common.OracleCallableStatement)conn.prepareCall("BEGIN OPEN ? FOR select * from emp; END;");
//注册输出参数
cstmt.registerOutParameter(1, java.sql.Types.OTHER);
// 执行
cstmt.execute();
//获取结果集
rs = cstmt.getResultSet(1);
//打印结果集
printResultSet(rs);
//关闭结果集
rs.close();
//关闭语句对象
cstmt.close();
//weblogic SQL语句变量2
cstmt2 =
(weblogic.jdbc.common.OracleCallableStatement)conn.prepareCall("BEGIN single_cursor(?, ?); END;");
cstmt2.registerOutParameter(1, java.sql.Types.OTHER);
// 你也可以设置输入参数, 执行语句。
cstmt2.setInt(2, 1);
//执行
cstmt2.execute();
//获取结果集
rs = cstmt2.getResultSet(1);
//打印结果集
printResultSet(rs);
// 设置输入参数, 执行语句。
cstmt2.setInt(2, 2);
cstmt2.execute();
//获取结果集
rs = cstmt2.getResultSet(1);
//打印结果集
printResultSet(rs);
// 设置输入参数, 执行语句。
cstmt2.setInt(2, 3);
cstmt2.execute();
//获取结果集
rs = cstmt2.getResultSet(1);
//打印
printResultSet(rs);
// 关闭CallableStatement
cstmt2.close();
//weblogic SQL语句3,多光标
cstmt3 =
(weblogic.jdbc.common.OracleCallableStatement)conn.prepareCall("BEGIN multi_cursor(?, ?, ?); END;");
//注册输出参数,并执行
cstmt3.registerOutParameter(1, java.sql.Types.OTHER);
cstmt3.registerOutParameter(2, java.sql.Types.OTHER);
cstmt3.registerOutParameter(3, java.sql.Types.OTHER);
cstmt3.execute();
// 为每个参数创建结果集
rs1 = cstmt3.getResultSet(1);
rs2 = cstmt3.getResultSet(2);
rs3 = cstmt3.getResultSet(3);
// 打印结果集
printResultSet(rs1);
printResultSet(rs2);
printResultSet(rs3);
// 关闭结果集
rs1.close();
rs2.close();
rs3.close();
// 关闭CallableStatement
cstmt3.close();
} catch (Exception e) {
//异常处理
System.out.println("Exception was thrown: " + e.getMessage());
} finally { //关闭连接等资源
try {
if(rs != null)
rs.close();
if(rs1 != null)
rs1.close();
if(rs2 != null)
rs2.close();
if(rs3 != null)
rs3.close();
if(cstmt != null)
cstmt.close();
if(cstmt2 != null)
cstmt2.close();
if(cstmt3 != null)
cstmt.close();
if(conn != null)
conn.close();
} catch (SQLException sqle) {
System.out.println("SQLException was thrown: " + sqle.getMessage());
}
}
}
//打印结果集静态方法
static void printResultSet(ResultSet rs)
throws SQLException
{
int rowcount = 0;
while(rs.next()) rowcount++;
System.out.println("Records = " + rowcount );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -