java获取存储过程返回的结果集
2015-04-14 10:57
302 查看
目的:存储过程查询一张表得到多条记录,由java获取这些记录。
例子:
1、创建一张表,插入数据
CREATE TABLE TEST_TABLE(
ID NUMBER(16),
NAME VARCHAR2(20)
);
insert into TEST_TABLE (ID, NAME) values ('1', '张三');
insert into TEST_TABLE (ID, NAME) values ('2', '李四');
2、创建存储过程
--包头
CREATE OR REPLACE PACKAGE PKG_TEST IS
TYPE CURSOR_TYPE IS REF CURSOR;--用于接收结果的游标
PROCEDURE P_TEST(O_CURSOR OUT CURSOR_TYPE);--存储过程
END PKG_TEST;
--包体
CREATE OR REPLACE PACKAGE BODY PKG_TEST IS
PROCEDURE P_TEST(O_CURSOR OUT CURSOR_TYPE) IS--输出的是包头中定义的游标
BEGIN
OPEN O_CURSOR FOR
SELECT ID, NAME FROM TEST_TABLE;--将查询结果放入游标中
END P_TEST;
END PKG_TEST;
3、编写java代码
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
public class Test {
public static void main(String[] args) {
Connection conn = null;
CallableStatement proc = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
proc = conn.prepareCall("{ call PKG_TEST.P_TEST(?) }");//存储过程包.名
proc.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//需要注册输出的参数
proc.execute();//执行存储过程
rs = ((OracleCallableStatement) proc).getCursor(1);//获取结果集
while (rs.next()) {
System.out.println("ID:" + rs.getInt("ID") + " NAME:" + rs.getString("NAME"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (conn != null && !conn.isClosed()) conn.close();
rs = null;
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4、代码执行结果如下:
ID:1 NAME:张三
ID:2 NAME:李四
5、注意:
如果报"类型长度大于最大值"的错,按照网上资料,将1.29M的ojdbc14.jar包替换为1.46M的后解决。可以在oracle安装目录product\10.2.0\db_1\jdbc\lib下找到。
例子:
1、创建一张表,插入数据
CREATE TABLE TEST_TABLE(
ID NUMBER(16),
NAME VARCHAR2(20)
);
insert into TEST_TABLE (ID, NAME) values ('1', '张三');
insert into TEST_TABLE (ID, NAME) values ('2', '李四');
2、创建存储过程
--包头
CREATE OR REPLACE PACKAGE PKG_TEST IS
TYPE CURSOR_TYPE IS REF CURSOR;--用于接收结果的游标
PROCEDURE P_TEST(O_CURSOR OUT CURSOR_TYPE);--存储过程
END PKG_TEST;
--包体
CREATE OR REPLACE PACKAGE BODY PKG_TEST IS
PROCEDURE P_TEST(O_CURSOR OUT CURSOR_TYPE) IS--输出的是包头中定义的游标
BEGIN
OPEN O_CURSOR FOR
SELECT ID, NAME FROM TEST_TABLE;--将查询结果放入游标中
END P_TEST;
END PKG_TEST;
3、编写java代码
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
public class Test {
public static void main(String[] args) {
Connection conn = null;
CallableStatement proc = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
proc = conn.prepareCall("{ call PKG_TEST.P_TEST(?) }");//存储过程包.名
proc.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);//需要注册输出的参数
proc.execute();//执行存储过程
rs = ((OracleCallableStatement) proc).getCursor(1);//获取结果集
while (rs.next()) {
System.out.println("ID:" + rs.getInt("ID") + " NAME:" + rs.getString("NAME"));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (conn != null && !conn.isClosed()) conn.close();
rs = null;
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
4、代码执行结果如下:
ID:1 NAME:张三
ID:2 NAME:李四
5、注意:
如果报"类型长度大于最大值"的错,按照网上资料,将1.29M的ojdbc14.jar包替换为1.46M的后解决。可以在oracle安装目录product\10.2.0\db_1\jdbc\lib下找到。
相关文章推荐
- Java获取存储过程返回的多个结果集
- Java获取存储过程返回的多个结果集
- Java获取存储过程返回的多个结果集
- Mysql存储过程(二)——多结果集返回与java获取
- Java 调用存储过程 返回结果集
- Java获取存储过程返回的多个结果集
- Android多线程研究(8)——Java5中Futrue获取线程返回结果
- Java 调用存储过程 返回结果集
- Android多线程研究(8)——Java5中Futrue获取线程返回结果
- java多线程获取返回结果--Callable和Future示例
- java 调用存储过程返回多个结果集
- Android多线程的研究(8)——Java5于Futrue获取线程返回结果
- SQL 在存储过程中获取另一个存储过程返回的结果集
- java获取存储过程返回的结果集(多个结果集)
- 使用java传参调用exe并且获取程序进度和返回结果的一种方法
- Java获取Oracle存储过程中执行查询返回的结果集
- 使用java传参调用exe并且获取程序进度和返回结果的一种方法
- java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
- Java 调用存储过程 返回结果集
- 通过HTTP方式获取URL返回结果数据(Java)