存储过程:
create or replace procedure inandoutpro(a in out number,b in out number) as
begin
a:=a+b;
b:=a-b;
a:=a-b;
end inandoutpro;
java类调用存储过程:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "scott", "ronaldo");
String procedure = "{call inandoutpro(?,?)}";
CallableStatement cs = conn.prepareCall(procedure);
cs.setInt(1, 5);
cs.setInt(2, 7);
cs.registerOutParameter(1, java.sql.Types.INTEGER);
cs.registerOutParameter(2, java.sql.Types.INTEGER);
cs.executeUpdate();
int a = cs.getInt(1);
int b = cs.getInt(2);
System.out.println(a + "==" + b);
函数(行转列):
create or replace function rowToCol(QuerySql varchar2) return varchar2 as
begin
declare type cu_rtoc is ref cursor;
proscu cu_rtoc;
string_name varchar2(200);
row_cu product%rowtype;
begin
open proscu for QuerySql;
loop
fetch proscu into row_cu;
exit when proscu%notfound;
string_name:=string_name||row_cu.pname||',';
end loop;
return rtrim(string_name,',');--去掉最后的逗号
end;
end rowToCol;
java类调用函数:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "scott", "ronaldo");
String procedure = "{?=call rowToCol(?)}";
CallableStatement cs = conn.prepareCall(procedure);
cs.registerOutParameter(1, Types.VARCHAR);// 获得返回的字符串
String sql = "select * from product";
cs.setString(2, sql);
cs.executeUpdate();
String names = cs.getString(1);
System.out.println(names);
conn.close();
包(游标):
--package包(接口)
create or replace package pro_package as
type cu_ref is ref cursor;
procedure pro_product(cur_ref out cu_ref);
end pro_package;
--实现包(实现类)
create or replace package body pro_package as
procedure pro_product(cur_ref out cu_ref) is
begin
open cur_ref for 'select * from product';
end pro_product;
end pro_package;
java类调用包里的过程返回游标:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:orcl", "scott", "ronaldo");
String callsql = "{call pro_package.pro_product(?)}";
OracleCallableStatement cs = (OracleCallableStatement) conn
.prepareCall(callsql);
cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
cs.executeUpdate();
ResultSet rs = null;
rs = cs.getCursor(1);
while (rs.next()) {
System.out.println(rs.getString(1) + "==" + rs.getString(2) + "=="
+ rs.getString(3));
}
rs.close();
conn.close();
分享到:
相关推荐
在某些复杂的数据处理场景下,我们可能需要调用数据库中的存储过程或函数。本文将详细阐述如何通过JDBC在Java程序中调用存储过程和函数,并提供一个实际的例子。 ### 1. JDBC概述 JDBC是Java API,它提供了统一的...
通过以上步骤,我们可以成功地使用JDBC调用数据库的过程和函数。在实际开发中,为了提高代码的可读性和复用性,通常会将这些操作封装到DAO(Data Access Object)层,便于管理和维护。同时,现代ORM框架如Hibernate...
本篇文章将详细讲解如何利用JDBC调用存储过程、函数以及处理游标。 首先,存储过程是数据库中预编译的一组SQL语句,它允许我们封装复杂的业务逻辑,提高执行效率,减少网络传输的数据量。在JDBC中调用存储过程通常...
在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...
本文将深入探讨如何使用JDBC调用Oracle数据库的存储过程来实现增删改查操作。 首先,理解JDBC是Java与各种数据库交互的桥梁,它提供了一组API,允许程序员执行SQL语句并处理结果。Oracle数据库则是一种广泛使用的...
从给定的文件信息来看,我们正在探讨一个Java程序中用于连接数据库并调用存储过程的通用类——`BaseDaoOutput`。这个类是IT领域中处理数据库操作时经常使用的一种设计模式,它通过封装数据库连接、执行SQL语句、处理...
在本项目中,我们主要探讨的是如何在Java中利用JDBC技术来操作MySQL数据库,并且扩展到使用存储过程和函数的调用。JDBC(Java Database Connectivity)是Java语言连接数据库的标准API,它允许Java程序与各种数据库...
在Java编程中,调用数据库的存储过程是常见的任务,特别是在处理复杂的业务逻辑或需要高效数据操作时。本文将详细讲解如何在Java中调用含有`OUT`参数的存储过程,帮助开发者解决这类问题。 首先,理解存储过程的...
通过 `CallableStatement` 可以方便地在Java应用程序中调用数据库中的存储过程和函数,从而实现复杂的数据处理任务。理解其核心方法的使用对于高效利用JDBC至关重要。在实际应用中,还需要注意资源管理,确保连接和...
当你需要在应用程序中调用Oracle函数和存储过程时,通常会使用数据库驱动或ODBC/JDBC。比如在Delphi中(根据提供的文件名`*.dpr`, `*.dfm`等,可能是Delphi项目),你可以使用ADO或Oracle的OCI库。以下是一个Delphi...
在Java应用程序中调用Oracle数据库中的存储过程或函数是一项常见的任务。这不仅能够提高代码的执行效率,还可以有效地管理事务处理,确保数据的一致性和完整性。本文将详细介绍如何在Java环境中通过`...
4. **本地协议纯Java驱动程序**:这类驱动程序直接将JDBC调用转化为特定数据库的网络协议,实现了直接与数据库服务器的通信,是Intranet访问的理想选择。 #### 三、JDBC API - **Driver接口**:代表驱动程序,所有...
这个文档合集应该详细讲解了这些步骤和最佳实践,帮助开发者熟练掌握在Java中利用MyBatis调用MySQL存储过程和函数的技巧,从而更高效地进行数据库操作。通过深入学习和实践,开发者可以更好地理解这两者之间的交互,...
3. **建立连接**:通过调用 `database` 函数并传递必要的参数来建立数据库连接。 4. **执行查询**:使用 `exec` 函数执行SQL查询语句(此处为 `SELECT * FROM TestTable`),该语句返回一个游标对象。 5. **获取...
4. 对于复杂查询,考虑使用存储过程或数据库提供的函数。 5. 优化SQL语句,避免全表扫描,使用索引,减少JOIN操作等。 **六、异常处理** 在进行JDBC操作时,需要注意捕获和处理`SQLException`。通常,一个SQL操作...
总之,通过JDBC调用MySQL存储过程使得Java应用程序能够灵活地与数据库交互,执行复杂的业务逻辑,同时保持代码的简洁性和可读性。这在大型系统中尤其重要,因为它允许数据库管理员在不改变应用程序代码的情况下优化...
- **CallableStatement**:用于执行存储过程或函数的Statement。 - **ResultSet**:表示数据库结果集的数据表,通常通过执行查询语句生成。 - **SQLException**:所有JDBC异常的基类,用于处理数据库操作中可能出现...
JDBC的结构; SQL指令操作数据库以及常用的SQL函数的使用; JDBC访问数据库的四种基本形式、事务处理; 分页显示以及如何利用JavaBean操作数据库; 访问Oracle数据库以及操作Oracle存储过程;
在Java编程中,调用SQL数据库的存储过程是一项常见的任务,尤其在处理复杂业务逻辑或批量数据操作时。本文将详细介绍如何使用Java来调用存储过程,并探讨相关的数据库设计原则。 首先,理解存储过程的基本概念至关...