在平台中调用oracle 的存储过程procedure实例解析 中解析了平台使用spring调用oracle procedure的实例. 这里自己写一个简单的测试类.
1.获得datasource, 这里通过jdbc连接.见 java项目使用spring jdbc连接数据库
2. 分析知spring主要通过StoredProcedure(spring-jdbc.jar包中的 org.springframework.jdbc.object.StoredProcedure)类进行对procedure的调用.
而StoreProcedure为abstract, 不能实例化对象 ,所以需子类继承.并重写父类一些方法.
public class TestSpring extends StoredProcedure {
3.加载datasource,通过读源代码知 在构造方法中加载DataSource
public TestSpring(DataSource dataSource, String procedureName) {
super(dataSource, procedureName);
}
public TestSpring(DataSource dataSource, String procedureName, boolean isFunction) {
super(dataSource, procedureName);
super.setFunction(isFunction);
}
注:第二个构造方法, isFunction指所调用的是函数(Function)or存储过程(Procedure), 这里我以调用function为例.是有第二个构造方法
4.调用方法
所调用的存储过程为
function isUser(LOGIN_NAME in varchar2, PASSWORD in varchar2)
return integer as
vUserID integer;
begin
select ID
into vUserID
from Users
where upper(LOGIN_ID) = upper(isUser.LOGIN_NAME)
and PASSWORD = isUser.PASSWORD
and STATUS in (1, 3);
return vUserID;
exception
when NO_DATA_FOUND then
return - 1;
end;
5.声明 输入和输出 的参数和oracle 中定义的一致(用到org.springframework.jdbc.core.SqlParameter 和 org.springframework.jdbc.core.SqlOutParameter )
SqlParameter paramIn = new SqlParameter("LOGIN_NAME", OracleTypes.IVARCHAR);
sp.declareParameter(paramIn);
paramIn = new SqlParameter("PASSWORD", OracleTypes.VARCHAR);
sp.declareParameter(paramIn);
paramIn = new SqlOutParameter("vUserID", OracleTypes.INTEGER); // SqlOutParameter是Sqlparameter的子类
sp.declareParameter(paramIn);
// 编译
sp.compile();
6. 加载输入和输出值 都以Map的形式进行加载
Map inParams = new HashMap();
inParams.put("LOGIN_NAME", "***");
inParams.put("PASSWORD", "***");
7 ,执行调用
Map result = sp.execute(inParams);
结果处理:
Integer uid = (Integer) result.get("vUserID");
由于代码写的较乱, 只粘贴主要代码:
DataSource ds;
@Test
public void getDatasource() throws SQLException{
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ds = (DataSource)ctx.getBean("dataSource");
logger.info("datasource : " + ds);
}
public void testInvokeProcedure() throws SQLException{
getDatasource();
StoredProcedure sp = new TestSpring(ds, "UserPkg.isUser", true);
SqlParameter param;
//out parameter
param = new SqlOutParameter("vUserID", OracleTypes.INTEGER);
sp.declareParameter(param);
//in parameter
param = new SqlParameter("LOGIN_NAME", OracleTypes.VARCHAR);
sp.declareParameter(param);
param = new SqlParameter("PASSWORD", OracleTypes.VARCHAR);
sp.declareParameter(param);
sp.compile();
Encryption enc = new Encryption("abn_admin", "000000" );
String encPassword = enc.encrypt();
logger.info("encPassword: " +encPassword);
Map inParams = new HashMap();
inParams.put("LOGIN_NAME", "abn_admin");
inParams.put("PASSWORD", encPassword);
Map result = sp.execute(inParams );
logger.info("message : " + (Integer)result.get("vUserID") );
}
分享到:
相关推荐
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
本文将深入探讨如何在Spring和MyBatis集成环境中调用Oracle数据库的存储过程,包括无返回值、返回结果集以及返回多个结果的情况。 首先,让我们理解基础概念。Spring是一个全面的后端开发框架,它提供了依赖注入、...
在 Spring Boot 项目中,我们可以使用 EntityManager 的 createStoredProcedureQuery 方法来调用 Oracle 存储过程。下面是一个示例代码: ```java @Repository public class ProdureDAO { @PersistenceContext ...
总的来说,理解如何在Spring中正确地调用Oracle存储过程并传递数组参数是提高应用程序效率和数据库操作灵活性的重要技能。这涉及到了数据库设计、Java编程、Spring框架的使用以及对Oracle特定特性的掌握。通过上述...
在Java中调用Oracle存储过程,你需要使用`CallableStatement`对象。`CallableStatement`是`PreparedStatement`的子类,专门用于调用数据库存储过程。以下是如何使用`CallableStatement`调用上面定义的存储过程`sp_...
本文将详细介绍如何在SSM项目中调用Oracle存储过程,这对于提升应用程序性能和简化复杂操作具有重要意义。 首先,让我们了解一下SSM框架。SSM是由Spring框架、SpringMVC和MyBatis三个组件组成的轻量级Java Web开发...
总之,使用Java调用Oracle存储过程进行数据库备份是一种常见的实践,它允许我们在应用程序中灵活地管理复杂的数据库操作,同时确保数据的安全性。结合适当的备份策略和工具,可以构建出高效可靠的数据库备份系统。
本篇将详细介绍如何使用JDBC连接Oracle数据库并执行存储过程。 首先,我们需要理解JDBC的基本概念。JDBC是Java平台的标准API,它允许Java程序与各种数据库进行通信。通过JDBC,我们可以创建数据库连接、发送SQL语句...
在Java开发中,使用iBATIS(现在称为MyBatis)作为持久层框架时,调用数据库的存储过程是一种常见的需求。本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库...
下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储过程创建一个`<select>`标签,但与通常的查询不同,这里需要设置`id`...
2. 使用Spring的jdbcTemplate调用存储过程,处理输入输出参数。 3. 将存储过程返回的数据在Java后端进行处理,封装成适合前端的数据结构。 4. Flex前端通过HTTP服务或AMF获取数据,展示在DataGrid中,并实现分页导航...
在Java端,可以利用Spring框架整合jdbcTemplate来调用Oracle存储过程。这里主要涉及以下步骤: 1. **配置数据源**:在Spring的配置文件中定义数据源。 2. **定义DAO层**:在DAO层定义方法,用于调用存储过程。 3. *...
最后,对于复杂的SQL查询,可以使用`@Query`注解配合JPA Repository,或者通过`@Procedure`调用存储过程。 总之,Spring Boot集成Oracle数据库涉及多个步骤,包括引入依赖、配置数据库连接、编写DAO层代码、事务...
描述这是一个简单的项目,它演示了如何为特定存储过程配置 Spring bean 并参与 Apache Camel 路由。设置和安装设置环境和运行此演示的步骤: 查找可用的 Oracle 数据库环境,或安装 Oracle XE 11g。 转至下载它及其...
Oracle JDBC 支持调用数据库中的存储过程。这可以通过`CallableStatement`对象实现。 示例代码: ```java String sql = "{ CALL test_procedure(?, ?) }"; CallableStatement cstmt = conn.prepareCall(sql); cstmt...
至于调用Oracle的存储过程,Java提供了`CallableStatement`接口。通过`{call}`语法来调用存储过程,参数可以作为输入、输出或输入/输出参数传递。例如,调用一个名为`PROCEDURE_NAME`的存储过程,可能的代码如下: ...