java调用ORACLE 存储过程返回值
2007-03-29 19:18
579 查看
但是Oracle、PostgreSQL和DB2的JDBC驱动器都支持在ResultSet上打开到游标的指针(pointer)。
设想列出所有没有活到退休年龄的诗人,下面是完成这个功能的存储过程,返回一个打开的游标,同样也使用PostgreSQL的pl/pgsql语言:
[pre]create procedure list_early_deaths () return refcursor as '
declare
toesup refcursor;
begin
open toesup for
SELECT poets.name, deaths.age
FROM poets, deaths
-- all entries in deaths are for poets.
-- but the table might become generic.
WHERE poets.id = deaths.mort_id
AND deaths.age < 60;
return toesup;
end;
' language 'plpgsql';[/pre]
下面是调用该存储过程的Java方法,将结果输出到PrintWriter:
PrintWriter:
static void sendEarlyDeaths(PrintWriter out)
{
Connection con = null;
CallableStatement toesUp = null;
try
{
con = ConnectionPool.getConnection();
// PostgreSQL needs a transaction to do this...
con.setAutoCommit(false);
// Setup the call.
CallableStatement toesUp
= connection.prepareCall("{ ? = call list_early_deaths () }");
toesUp.registerOutParameter(1, Types.OTHER);
getResults.execute();
ResultSet rs = (ResultSet) getResults.getObject(1);
while (rs.next())
{
String name = rs.getString(1);
int age = rs.getInt(2);
out.println(name + " was " + age + " years old.");
}
rs.close();
}
catch (SQLException e)
{
// We should protect these calls.
toesUp.close();
con.close();
}
}
设想列出所有没有活到退休年龄的诗人,下面是完成这个功能的存储过程,返回一个打开的游标,同样也使用PostgreSQL的pl/pgsql语言:
[pre]create procedure list_early_deaths () return refcursor as '
declare
toesup refcursor;
begin
open toesup for
SELECT poets.name, deaths.age
FROM poets, deaths
-- all entries in deaths are for poets.
-- but the table might become generic.
WHERE poets.id = deaths.mort_id
AND deaths.age < 60;
return toesup;
end;
' language 'plpgsql';[/pre]
下面是调用该存储过程的Java方法,将结果输出到PrintWriter:
PrintWriter:
static void sendEarlyDeaths(PrintWriter out)
{
Connection con = null;
CallableStatement toesUp = null;
try
{
con = ConnectionPool.getConnection();
// PostgreSQL needs a transaction to do this...
con.setAutoCommit(false);
// Setup the call.
CallableStatement toesUp
= connection.prepareCall("{ ? = call list_early_deaths () }");
toesUp.registerOutParameter(1, Types.OTHER);
getResults.execute();
ResultSet rs = (ResultSet) getResults.getObject(1);
while (rs.next())
{
String name = rs.getString(1);
int age = rs.getInt(2);
out.println(name + " was " + age + " years old.");
}
rs.close();
}
catch (SQLException e)
{
// We should protect these calls.
toesUp.close();
con.close();
}
}
相关文章推荐
- java调用ORACLE 存储过程返回值22
- java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)
- java调用ORACLE 存储过程返回值33
- Oracle-存储过程-参数为数组-返回值为集合,java-调用存储过程
- java调用oracle带有返回值的存储过程
- Java如何实现调用oracle带有返回值的存储过程
- Java 调用Oracle 存储过程
- java通过prepareCall调用oracle返回游标的存储过程
- Oracle创建存储过程以及JAVA调用方法
- 【Java 调用Oracle 存储过程】
- oracle pl/sql之java中调用oracle有参存储过程
- jpa 调用oracle 存储过程 无返回值 ,有返回值。
- Java 调用Oracle 存储过程
- java 调用oracle中存储过程与调用function函数两例
- java调用oracle 存储过程
- oracle学习 十二 使用.net程序调用带返回值的存储过程(持续更新)
- 结合oracle中的存储过程,在Java中调用并测试该存储过程
- java调用oracle 存储过程 以及游标使用
- Java调用Oracle分页存储过程
- java中调用存储过程(oracle)