在平台中调用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 JdbcTemplate调用Oracle存储过程输出游标结果集实现增删改查
使用Spring的JdbcTemplate调用Oracle的存储过程
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
SSH项目改为Spingboot项目,将项目中部分需要调用存储过程的部分用entityManagerFactory.unwrap(SessionFactory.class).openSession()来获取Session实现后发现项目访问数据库超过十次就会挂掉,原因是Springboot...
Spring jdbcTemplate调用Oracle存储过程返回List集合
在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助
主要给大家介绍了关于Spring boot调用Oracle存储过程的两种方式及完整代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
JdbcTemplate 的介绍、pom 依赖、DI 注入可以参考《Spring JdbcTemplate 模板剖析 之 常用 增删改查》,本文继续介绍 JdbcTemplate 调用数据库的存储过程,虽然 Mysql 也有存储过程,但是为了尽可能的多覆盖一点,...
spring mvc + mybatis 调用mysql 存储过程
怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?接下来通过本文给大家介绍Mybatis传list参数调用oracle存储过程,需要的朋友可以参考下
springboot继承mybatis后,通过mybatis调用oracle数据库中创建的存储过程,并获取通过游标返回的数据。
使用Java struts+spring_ibaits+调用Mysql存储过程 实现增删改查
我们可以通过几种不同的方式调用Oracle存储过程。 使用 使用javax.persistence 。 我们在这种情况下使用了这种方法无论我们选择哪种方式,在使用spring-data时都应该设置一些关键方面/属性(尤其是当我们不让Spring...
NULL 博文链接:https://xiaogui9317170.iteye.com/blog/286401
前几天一直在搞spring+hibernate执行存储过程的技术,在网上查了很多资料没有一个是完全的能执行的,代码简单但,几天时间比较辛苦,所以要分多了点。由于包都太大,所以删掉啦!
怎么使用MyBatis调用存储过程,步骤详细清楚,一看就会配置
用ibatis调用存储过程的介绍,使用java语言进行开发
初学SpringCloud简单配置Oracle数据库,从Oracle数据库中获取数据
本篇文章主要介绍了Spring Data JPA调用存储过程实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
maven+SpringMVC+Spring+Mybatis图片上传本地以及显示+调用存储过程