备注:
1、写存储过程时,注意commit提交;
2、oracle默认转义字符为单引号‘;
3、存储过程带参数时,注意要把out类型的写在前面,否则,可能报错(用游标类型就会报错);
4、调用函数和调用存储过程类似,也要cs.registerOutParameter(1, java.sql.Types.VARCHAR);
首先我们以一个简单的例子开始,在这个例子中,只存在一个返回值。存储过程如下
SQL> create or replace procedure lizhe (aa out varchar2)is
begin
select password into aa from passport where id='123111';
end ;
/
补充说明:要注意的是这个存储过程存在一个(aa out varchar2)这样的标识,这是一个参数,out表示这是一个输出参数,在select语句中将password的值“into”到这个参数里
然后再java端:
public static void runProcedure(){
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.159:1521:TOPS","YAC3","YAC3");
java.sql.CallableStatement cs = con.prepareCall("{call lizhe(?)}");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
cs.execute();
System.out.print("value2:" + cs.getString(1)); //取出字符串——关键
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
补充说明:cs.registerOutParameter(1, java.sql.Types.VARCHAR);
重点只有这一句
2.多个返回值的
SQL> CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
/
Package created
SQL> CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
--此处可以使用临时表将统计数据存入临时表TB,然后在select from 临时表TB
OPEN p_CURSOR FOR 'SELECT * FROM TB';
END TESTC;
/
Procedure created
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcedure {
public TestProcedure() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.0.159:1521:tops";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "yac3", "yac3");
CallableStatement proc = null;
proc = conn.prepareCall("{call testc(?)}");
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
proc.executeQuery();
rs = (ResultSet)proc.getObject(1);
while(rs.next())
{
System.out.println(rs.getString("VALUE"));
}
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
相关推荐
### Java调用Oracle的过程和函数 在现代软件开发过程中,Java与Oracle数据库的结合非常常见。为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来...
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
Spring Boot 调用 Oracle 存储过程的两种方式及完整代码 在本文中,我们将为大家介绍 Spring Boot 调用 Oracle 存储过程的两种方式,并提供完整的代码示例。本文主要解决了在 Spring Boot 项目中调用 Oracle 存储...
本文将深入探讨Oracle存储过程的创建、使用以及如何通过Java应用程序进行调用。 首先,我们来看一下如何在Oracle中创建存储过程。存储过程由`CREATE PROCEDURE`语句定义,其基本结构如下: ```sql CREATE OR ...
在Java开发中,Oracle存储过程常被用于后端数据库操作,与Java应用程序进行交互,实现业务逻辑。 首先,理解存储过程的概念是必要的。存储过程是一组预先编译的SQL语句,它们以函数的形式存储在数据库中,可以接受...
本文将详细解析如何通过Java调用Oracle存储过程,包括无返回值和有返回值的情况。 首先,我们需要了解存储过程的基本概念。存储过程是预编译在数据库端的一组SQL语句,可以接受输入参数,执行特定操作,并可能返回...
Oracle存储过程是一组预编译的SQL和PL/SQL语句,存储在数据库服务器上,可以按需调用执行。它们提供了封装和重用代码的能力,提高了性能,并减少了网络流量。创建存储过程的基本语法如下: ```sql CREATE OR ...
Java可以通过JDBC调用Oracle存储过程,包括`CallableStatement`对象来执行过程并处理输入/输出参数。 9. **更新与权限保留** 使用`CREATE OR REPLACE PROCEDURE`语句更新存储过程时,原有执行权限不会丢失。 10....
6. **Java调用Oracle存储过程**:可以通过JDBC的CallableStatement对象调用存储过程,根据返回值类型选择不同的调用方式。 **Java调用Oracle存储过程总结** 1. **无返回值的存储过程**:使用`CallableStatement....
以下是一个简单的Java调用存储过程的示例代码: ```java import java.sql.*; public class ProcedureTest { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testDB"; ...
以上就是使用Java调用存储过程的基本步骤。注意,这个例子是基于Oracle数据库的,不同的数据库可能有不同的语法和数据类型。如果你使用其他数据库(如MySQL、SQL Server),请查阅相应的JDBC驱动文档,了解特定的...
6. 使用Hibernate或其他Java框架调用Oracle存储过程,需要了解对应的JDBC API或ORM框架的调用方法。 调用Oracle存储过程的方式有多种,以下是三种常见情况: - **无返回值的存储过程**:这类过程通常用于执行一些...
本文将详细探讨如何使用iBATIS调用Oracle存储过程,并处理返回的Cursor结果集。 首先,理解iBATIS调用存储过程的基本原理。iBATIS允许开发者在映射文件中定义存储过程调用,通过`<procedure>`标签来实现。在这个...
**用Java调用Oracle存储过程** 1. **无返回值的存储过程** 调用时通常使用`CallableStatement`,设置SQL语句为`{call procedure_name(?, ?)}`,然后设置参数并执行。 2. **有返回值的存储过程(非列表)** 如果...
本文将深入探讨Oracle存储过程的创建、调用以及其优势。 一、存储过程的创建 在Oracle中,我们可以使用`CREATE PROCEDURE`语句来创建存储过程。基本语法如下: ```sql CREATE OR REPLACE PROCEDURE procedure_name...
- **Java调用Oracle存储过程.docx**:这份文档应该会提供Java通过JDBC调用Oracle存储过程的实例和最佳实践。 - **sql存储过程教程.txt**:这个文本文件可能是一个全面的存储过程教程,涵盖多种数据库系统,包括SQL ...
在本文中,我们将深入探讨Oracle存储过程的定义、创建、调用以及其在实际应用中的重要性。 一、存储过程的定义与分类 存储过程是由一个或多个SQL语句和PL/SQL块组成的集合,它们被存储在数据库中并可由用户或应用...
Oracle的存储过程是数据库中一组预编译的SQL语句,它们封装在一起,形成一个可重用的单元,便于执行复杂的业务逻辑。存储过程可以接受输入参数,也可以返回结果,但不同于函数,它不需要返回一个特定的值。在Oracle...
通过以上步骤,我们可以利用Hibernate框架高效地调用Oracle数据库中的存储过程。这种方法不仅提高了系统的性能,还简化了复杂业务逻辑的处理,为开发者提供了更加灵活的编程方式。在未来开发过程中,可以进一步探索...
<parameter property="backcursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" resultMap="backmap"/> ``` 然后,在`procedure`元素中引用这个`parameterMap`: ```xml {call user_...