`
he91_com
  • 浏览: 399375 次
文章分类
社区版块
存档分类
最新评论

spring SimpleJdbcCall 调用存储过程 通过游标提取数据!

 
阅读更多

哎!搞了半天,终于OK了!有时Api也挺坑人的,明明就一样,但就报错,木有办法,只有自已解决--------------

Oracle存储过程代码:

--存储过程 包头
create or replace package myPack is
type c_cursors is ref cursor;
procedure deUser(v_id long);--删除
procedure getAllUser(myCursor out myPack.c_cursors);--查询
end myPack;

--存储过程 包体
create or replace package body myPack as
 /****************删除*******************/
procedure deUser(v_id long) is
  e_table exception;
  v_sql varchar2(200); 
  begin
  if v_id is null then
    raise e_table;
    end if;
    v_sql:='delete  from fuck where id=:1';
     execute immediate v_sql using v_id;
    exception 
      when e_table then
        dbms_output.put_line('参数不能为空!');
    end;
 /****************查询*******************/
 procedure getAllUser(myCursor out myPack.c_cursors) as
  v_sqlS varchar2(200);
  begin    
    v_sqlS:='select * from fuck';        
    open myCursor for v_sqlS;
  end;
end myPack;

DaoImple实现类代码,其它调用呀,Action呀就不用贴出来了吧,太多,重点就这个了!

public class UserDaoImple /*extends HibernateDaoSupport*/ implements UserDao {

	
	/**
	 * sql 原生sql支持
	 * 
	 */
	private JdbcTemplate jdbcTemplate;
	private SimpleJdbcTemplate simpleJdbcTemplate;
	private DataSource dataSource;
	private SimpleJdbcCall jdbcCall;
	
	
	//通过注入得得到DataSoruce再交组jdbcTemplate构造器
	@SuppressWarnings("deprecation")
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);//jdbcTemplate 方式查询
		
		this.dataSource= dataSource;//mappingSqlQuery方式
		
		//使用Simple 方式 更好
		this.simpleJdbcTemplate=new SimpleJdbcTemplate(dataSource);
		jdbcTemplate.setResultsMapCaseInsensitive(true);
		//创建simplejdbccall
		this.jdbcCall=new SimpleJdbcCall(this.jdbcTemplate)
		              .withProcedureName("myPack.getAllUser")
		              .withoutProcedureColumnMetaDataAccess()
		              .returningResultSet("fucks",
		            		  ParameterizedBeanPropertyRowMapper
		            		  .newInstance(Fuck.class));
	}

//-------------此处省略其它代码-------------------

/**
 * 存储过程删除用户
 */
public void deleteF(Fuck u) {
	jdbcTemplate.update("call mypack.deuser(?)",
			new Object[]{Long.valueOf(u.getId())});	
	
}

public Fuck getProcedure() {
	
	return null;
}
//------------存储过程  游标 获取全部用户---------------------------------
public List<Fuck> getProcShowList() {
	Map map=jdbcCall.execute(new HashMap<String,Object>(0));
	System.out.println("size: "+map.size());
	return (List<Fuck>) map.get("fucks");
}


spring 部份代码的配置

<!--  配制数据源
<bean id="myDataResource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url"  value="jdbc:oracle:thin:@localhost:1521:ABC"/>
<property name="username" value="tenement"/>
<property name="password" value="rui"/>

<property name="initialSize" value="3"/>
<property name="maxActive" value="500"/>
<property name="maxIdle" value="3"/>
<property name="minIdle" value="1"/>
 
</bean>
-->

<!-- 配制数据池 -->
 <bean id="myDataResource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/SSHnewPool"/>
  </bean>



<!-- 配制原生sql查询方式    注入dataSource -->
<bean id="UserDao" class="accp.dao.imple.UserDaoImple">
        <property name="dataSource" ref="myDataResource"/>
    </bean>


分享到:
评论

相关推荐

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    JAVA调用ORACLE存储过程游标使用

    在Java编程中,调用Oracle数据库的存储过程并处理返回的游标是一项常见的任务。Oracle存储过程可以封装复杂的业务逻辑,而游标则用于在结果集上进行迭代,特别是当结果集太大,不适合一次性加载到内存时。下面将详细...

    java调用oracle存储过程(游标)相关

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其当涉及到复杂的数据处理或事务操作时。本文将深入探讨如何使用Java来调用Oracle存储过程,特别是涉及游标的场景。 首先,Oracle存储过程是一种预编译的...

    Oracle存储过程、游标、函数的详解

    通过以上对Oracle存储过程、游标和函数的详细介绍,我们可以看到这些特性为Oracle数据库提供了一种强大而灵活的方式来处理数据。掌握这些技术对于开发高效的应用程序至关重要。在未来的学习和实践中,我们应该不断...

    Oralce PLSQL存储过程之游标实践!

    4. **提取数据**:使用`FETCH`语句从游标中提取数据: ```sql FETCH cursor_name INTO variable_list; ``` 5. **关闭游标**:完成数据提取后,应该关闭游标以释放资源: ```sql CLOSE cursor_name; ``` #### ...

    存储过程和游标

    ### 存储过程和游标知识点详解 #### 一、存储过程的概念与作用 ...通过这两个示例,我们可以看到存储过程的灵活性以及游标处理多行数据的强大能力。这些技术在实际开发中非常有用,能够帮助开发者更高效地管理数据库。

    sql存储过程和游标的运用

    SQL存储过程和游标的运用 SQL存储过程和游标是SQL语言中两个非常重要的概念,它们可以帮助开发者更好地管理和处理数据。...通过使用存储过程和游标,我们可以提高数据库的性能和安全性,并提高开发效率。

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...

    oracle存储过程返回游标数据集

    存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程

    存储过程触发器 游标

    例如,在一个订单处理系统中,可以创建一个触发器,每当有新订单插入时,这个触发器会调用一个存储过程,该过程使用游标遍历订单的每一项商品,检查库存并更新相关记录。这样,系统可以自动跟踪库存变化,无需额外的...

    pl/sql语句(包含存储过程和游标)一

    如题,初步研究了pl/sql的写法,现给出存储过程,游标等的使用,后续会给出其他的用法

    mysql存储过程_游标_项目练习

    在MySQL中,游标通常与存储过程配合使用,使我们能够根据需要在结果集中向前或向后移动,实现逐行处理数据,这在动态或条件性的数据处理中尤为关键。 在“mysql存储过程_游标_项目练习”中,我们可能需要完成以下...

    SQL SERVER中的存储过程和游标的使用大综合

    3. **提取数据**:使用`FETCH NEXT`语句获取当前行,并将游标指针移动到下一行。 4. **处理数据**:在每次提取后,可以对当前行数据执行操作。 5. **关闭和释放游标**:完成处理后,使用`CLOSE`关闭游标,然后用`...

    存储过程和游标详解

    当需要执行这些预定义的操作时,只需通过调用存储过程的名称,数据库就会自动执行其中的所有语句,无需再次编译,这大大提高了执行效率。 ##### 为什么引入存储过程? 存储过程的引入并非简单的SQL语句堆砌,而是...

    Oracle存储过程out游标

    在PL/SQL中,声明一个Out类型的游标变量,然后在存储过程中打开这个游标执行查询,最后在调用者中通过这个游标变量获取数据。例如: ```sql CREATE OR REPLACE PROCEDURE get_data ( cursor_out OUT SYS_REFCURSOR...

    存储过程游标用于批量的插入数据

    ### 存储过程与游标的综合应用:批量插入数据 #### 一、存储过程简介 在数据库管理系统(DBMS)中,存储过程是一种预编译的SQL代码块,它可以接受输入参数并返回输出值,类似于编程语言中的函数或过程。通过创建...

    Oracle 存储过程JAVA调用存储过程 游标使用

    通过阅读和分析这些文件,你可以深入理解如何在Java应用程序中调用Oracle存储过程,并且有效地利用游标处理数据。这个过程涉及到数据库设计、SQL编写、PL/SQL编程以及Java JDBC技术,是数据库开发中的核心技能之一。

    MS SQL Server2005存储过程、游标、游标嵌套综合例子

    通常,这样的示例会展示如何在存储过程中声明和使用游标,以及如何通过游标来迭代处理数据,以实现复杂的逻辑,比如批量更新或数据验证。 通过学习和理解这个示例,开发者可以更好地掌握SQL Server 2005中的存储...

    游标 和 存储过程的创建 及 在程序中的调用

    游标和存储过程是数据库管理中非常重要的两个概念,它们在数据处理和应用程序开发中扮演着关键角色。本文将详细探讨这两个概念,以及如何在程序中创建和调用它们。 首先,我们来看“游标”(Cursor)。游标提供了一...

Global site tag (gtag.js) - Google Analytics