哎!搞了半天,终于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存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
在Java编程中,调用Oracle数据库的存储过程并处理返回的游标是一项常见的任务。Oracle存储过程可以封装复杂的业务逻辑,而游标则用于在结果集上进行迭代,特别是当结果集太大,不适合一次性加载到内存时。下面将详细...
在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其当涉及到复杂的数据处理或事务操作时。本文将深入探讨如何使用Java来调用Oracle存储过程,特别是涉及游标的场景。 首先,Oracle存储过程是一种预编译的...
通过以上对Oracle存储过程、游标和函数的详细介绍,我们可以看到这些特性为Oracle数据库提供了一种强大而灵活的方式来处理数据。掌握这些技术对于开发高效的应用程序至关重要。在未来的学习和实践中,我们应该不断...
4. **提取数据**:使用`FETCH`语句从游标中提取数据: ```sql FETCH cursor_name INTO variable_list; ``` 5. **关闭游标**:完成数据提取后,应该关闭游标以释放资源: ```sql CLOSE cursor_name; ``` #### ...
### 存储过程和游标知识点详解 #### 一、存储过程的概念与作用 ...通过这两个示例,我们可以看到存储过程的灵活性以及游标处理多行数据的强大能力。这些技术在实际开发中非常有用,能够帮助开发者更高效地管理数据库。
SQL存储过程和游标的运用 SQL存储过程和游标是SQL语言中两个非常重要的概念,它们可以帮助开发者更好地管理和处理数据。...通过使用存储过程和游标,我们可以提高数据库的性能和安全性,并提高开发效率。
Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...
存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程
例如,在一个订单处理系统中,可以创建一个触发器,每当有新订单插入时,这个触发器会调用一个存储过程,该过程使用游标遍历订单的每一项商品,检查库存并更新相关记录。这样,系统可以自动跟踪库存变化,无需额外的...
如题,初步研究了pl/sql的写法,现给出存储过程,游标等的使用,后续会给出其他的用法
在MySQL中,游标通常与存储过程配合使用,使我们能够根据需要在结果集中向前或向后移动,实现逐行处理数据,这在动态或条件性的数据处理中尤为关键。 在“mysql存储过程_游标_项目练习”中,我们可能需要完成以下...
3. **提取数据**:使用`FETCH NEXT`语句获取当前行,并将游标指针移动到下一行。 4. **处理数据**:在每次提取后,可以对当前行数据执行操作。 5. **关闭和释放游标**:完成处理后,使用`CLOSE`关闭游标,然后用`...
当需要执行这些预定义的操作时,只需通过调用存储过程的名称,数据库就会自动执行其中的所有语句,无需再次编译,这大大提高了执行效率。 ##### 为什么引入存储过程? 存储过程的引入并非简单的SQL语句堆砌,而是...
在PL/SQL中,声明一个Out类型的游标变量,然后在存储过程中打开这个游标执行查询,最后在调用者中通过这个游标变量获取数据。例如: ```sql CREATE OR REPLACE PROCEDURE get_data ( cursor_out OUT SYS_REFCURSOR...
### 存储过程与游标的综合应用:批量插入数据 #### 一、存储过程简介 在数据库管理系统(DBMS)中,存储过程是一种预编译的SQL代码块,它可以接受输入参数并返回输出值,类似于编程语言中的函数或过程。通过创建...
通过阅读和分析这些文件,你可以深入理解如何在Java应用程序中调用Oracle存储过程,并且有效地利用游标处理数据。这个过程涉及到数据库设计、SQL编写、PL/SQL编程以及Java JDBC技术,是数据库开发中的核心技能之一。
通常,这样的示例会展示如何在存储过程中声明和使用游标,以及如何通过游标来迭代处理数据,以实现复杂的逻辑,比如批量更新或数据验证。 通过学习和理解这个示例,开发者可以更好地掌握SQL Server 2005中的存储...
游标和存储过程是数据库管理中非常重要的两个概念,它们在数据处理和应用程序开发中扮演着关键角色。本文将详细探讨这两个概念,以及如何在程序中创建和调用它们。 首先,我们来看“游标”(Cursor)。游标提供了一...