- 浏览: 585277 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lihaiming:
受用了,已把定义的版本改为跟本地的一致,不用担心找不到了,现应 ...
Cannot find the declaration of element 'beans' -
Albert_Hawking:
看到这个帖子,解决了我的问题。 我的总结是这样的:由于mave ...
Cannot find the declaration of element 'beans' -
di1984HIT:
学习了啊,哈哈哈~~
win7下安装的sqlserver ,1433端口不通 -
蛋呢823:
我也碰到这个问题,尝试了你这个方法也不行,自己摸索了一天,终于 ...
was缓存导致web.xml更改无效 -
liuxiyangyang:
文章帮了我大忙了,谢谢
Cannot find the declaration of element 'beans'
转自 http://wilent.iteye.com/blog/40704
一般在java中,数据查询是通过Statement, PreparedStatement获取结果集,今天向大家介绍通过CallableStatement调用存储过程,从而获取结果集.
本文是所用的数据库为oracle.
一. 测试数据库表:
sql 代码
- create table wilent_user(
- id number(5) primary key ,
- name varchar2(100),
- sex varchar2(1), --Y为男,F为女;
- group_id number(5),
- teach varchar2(50) --学历;
- );
- create table wilent_group(
- id number(5) primary key ,
- name varchar2(100)
- );
- insert into wilent_group values (1,'组1');
- insert into wilent_group values (2,'组2');
- insert into wilent_group values (3,'组3');
- insert into wilent_group values (4,'组4');
- insert into wilent_group values (5,'组5');
- insert into wilent_user values (1,'吴','Y',1,'大专');
- insert into wilent_user values (2,'李','Y',1,'大专');
- insert into wilent_user values (3,'赵','N',2,'本科');
- insert into wilent_user values (4,'金','Y',2,'高中');
- insert into wilent_user values (5,'钱','N',2,'大专');
- insert into wilent_user values (6,'孙','N',1,'大专');
- insert into wilent_user values (7,'高','Y',3,'本科');
- insert into wilent_user values (8,'宋','N',3,'高中');
- insert into wilent_user values (9,'伍','Y',3,'大专');
- insert into wilent_user values (10,'欧','Y',4,'本科');
- insert into wilent_user values (11,'庄','N',4,'硕士');
- insert into wilent_user values (12,'纪','Y',4,'本科');
- insert into wilent_user values (13,'陈','Y',5,'大专');
- insert into wilent_user values (14,'龙','N',5,'大专');
- insert into wilent_user values (15,'袁','Y',5,'高中');
- insert into wilent_user values (16,'杨','Y',1,'本科');
- insert into wilent_user values (17,'江','N',1,'大专');
- insert into wilent_user values (18,'刘','Y',1,'硕士');
- insert into wilent_user values (19,'郭','N',3,'硕士');
- insert into wilent_user values (20,'张','Y',3,'大专');
- insert into wilent_user values (21,'文','N',3,'硕士');
- insert into wilent_user values (22,'李','N',4,'大专');
- insert into wilent_user values (23,'梅','Y',4,'本科');
- insert into wilent_user values (24,'王','N',4,'大专');
- insert into wilent_user values (25,'吕','N',5,'高中');
- insert into wilent_user values (26,'范','Y',5,'本科');
- insert into wilent_user values (27,'许','N',1,'大专');
- insert into wilent_user values (28,'墨','Y',1,'高中');
- insert into wilent_user values (29,'孔','N',1,'本科');
- insert into wilent_user values (30,'蔡','Y',1,'大专');
二. oracle 存储过程
sql 代码
-
--自定义类型;
- Create Or Replace Type wilent_row_table As Object
- (
- group_name Varchar2(100),
- group_count Number(4),
- male_count Number(4),
- woman_count Number(4),
- da_count Number(4),
- ben_count Number(4)
- );
- /
- --定义一个嵌套表类型;
- Create Or Replace Type wilent_tab_type Is Table Of wilent_row_table;
- /
- --返回一个游标类型;
- Create Or Replace Package wilent_types As
- Type cursor_type Is Ref Cursor ;
- End wilent_types;
- /
- Create Or Replace Procedure wilent_group_count(recordSet Out wilent_types.cursor_type)
- As
- v_tab wilent_tab_type := wilent_tab_type();
- index_max Number(4); --wilent_group最大的id;
- index_min Number(4); --wilent_group最小的id;
- index_for Number(4);
- group_name Varchar2(100);
- user_count Number(4);
- male_count Number(4);
- woman_count Number(4);
- da_count Number(4);
- ben_count Number(4);
- Begin
- dbms_output.put_line('as ');
- Select Max (g.Id) Into index_max From wilent_group g;
- --dbms_output.put_line(index_max);
- Select Min (g.Id) Into index_min From wilent_group g;
- --dbms_output.put_line(index_min);
- For index_for In Index_min..index_max Loop
- --添加新记录;
- v_tab.Extend;
- Select Name Into group_name From wilent_group Where Id=index_for;
- Select Count (*) Into user_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for;
- Select Count (*) Into male_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And sex='Y';
- Select Count (*) Into woman_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And sex='N';
- Select Count (*) Into da_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And teach='大专';
- Select Count (*) Into ben_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_for And teach='本科';
- --把记录写入;
- v_tab(v_tab.Last ) := wilent_row_table(group_name,user_count,male_count,woman_count,da_count,ben_count);
- End Loop;
- --把记录放在游标里;
- Open recordset For
-
--Table(Cast(v_tab As wilent_tab_type))目的是把v_tab强转为wilent_tab_type表
- Select group_name,group_count ,male_count ,woman_count ,da_count ,ben_count From Table ( Cast (v_tab As wilent_tab_type)) Order By group_name;
- End wilent_group_count;
- /
- --测试wilent_group_count();
- declare
- recordset wilent_types.cursor_type;
- Begin
- wilent_group_count(recordset);
- End ;
三. java代码:
java 代码
- package com.wilent.oracle;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import oracle.jdbc.driver.OracleTypes;
- import com.wilent.db.ConnectionManager;
- public class TestProcedure {
- public static void main(String[] args) {
- //获得conn连接,读者可以自行写;
- Connection conn = ConnectionManager.getConnection();
- ResultSet rs = null ;
- try {
- CallableStatement proc = conn.prepareCall("{call wilent_group_count(?)}" );
- proc.registerOutParameter(1 , OracleTypes.CURSOR);
- proc.execute();
- rs = (ResultSet) proc.getObject(1 );
- System.out.println("组名\t总计\t男性\t女性\t大专\t本科" );
- while (rs.next())
- {
- StringBuffer buffer = new StringBuffer();
- buffer.append(rs.getString("group_name" ));
- buffer.append("\t" );
- buffer.append(rs.getInt("group_count" ));
- buffer.append("\t" );
- buffer.append(rs.getInt("male_count" ));
- buffer.append("\t" );
- buffer.append(rs.getInt("woman_count" ));
- buffer.append("\t" );
- buffer.append(rs.getInt("da_count" ));
- buffer.append("\t" );
- buffer.append(rs.getInt("ben_count" ));
- System.out.println(buffer.toString());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- try {
- conn.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
-
}
组名 总计 男性 女性 大专 本科
组1 10 6 4 6 2
组2 3 1 2 1 1
组3 6 3 3 2 1
组4 6 3 3 2 3
组5 5 3 2 2 1
发表评论
-
使用Oracle 的 imp ,exp 命令实现数据的导入导出
2011-12-21 16:56 1558转自:http://www.cnblogs.com/furen ... -
ORACLE不能使用索引的原因分析
2011-07-19 10:10 1815转自http://hi.baidu.com/newton111 ... -
五分钟精通Oracle Hints
2011-07-06 14:05 1355转自 http://database.51cto.co ... -
常见Oracle HINT的用法
2011-07-06 14:05 964转自 http://oracle.chinaitlab.com ... -
PLSQL 设置 执行光标选中行
2011-06-09 16:39 3946设置参数,自动选中光标所在行的sql即可 tools-& ... -
ORACLE不同版本间的数据库导入导出
2011-01-20 11:08 2270转自:http://space.itpub.net/925 ... -
Oracle数据库分区表操作方法
2010-08-05 12:45 997转自:http://doc.linuxpk.com/79531 ... -
用批处理自动删除oracle
2010-07-23 14:10 1413有时候如果删除oracle不彻底的话,那么下次再安装的时候会有 ... -
AIX下启动ORACLE
2010-07-10 16:08 1570telnet 上去,以oracle 用户登录AIX:启动数据库 ... -
Oracle正则表达式函数
2010-06-10 19:36 10801、正则表达式中的元字符 元字符 意思 ... -
Oracle中to_char()参数详解
2010-06-10 19:34 17911 - / , . ; :"text" ... -
ORACLE函数大全
2010-06-10 19:22 932SQL 中的单记录函数1.AS ... -
Oracle数据类型
2010-06-10 19:13 1222数据类型(datatype)是列(column)或存储过程中的 ... -
Oracle修改IP地址
2010-06-07 09:02 6138oracle数据库所在的机器更改IP地址后,发现无法连接。 ...
相关推荐
本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...
值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...
总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...
以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。
本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...
### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
// 获取结果集 ``` 4. **处理结果集**:遍历`ResultSet`,获取存储过程返回的集合数据: ```java while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); // ... 其他字段 System...
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...
在Java编程中,调用Oracle数据库的存储过程并获取结果集是一项常见的任务。在这个场景下,我们将使用JDK 1.5版本,MyEclipse集成开发环境,以及Oracle 11g数据库。以下是对这个主题的详细解释: 首先,我们需要确保...
### JAVA调用ORACLE存储过程知识点详解 #### 一、背景与概述 在现代软件开发过程中,集成多种技术栈是常态。特别是在企业级应用中,Java 和 Oracle 数据库的组合非常常见。通过 Java 调用 Oracle 存储过程不仅能够...
Java程序调用存储过程是数据库操作中的常见任务,特别是在处理大量数据或需要高效执行复杂业务逻辑时。存储过程是预编译的SQL语句集合,它们可以提高性能、减少网络流量,并提供更好的安全性。在Java应用程序中调用...
6. **获取结果**:如果是查询型存储过程,可以使用`ResultSet`获取结果;如果是有输出参数的存储过程,可以通过`CallableStatement`获取输出参数的值: ```java int outputParamValue = cs.getInt(2); // 获取输出...
二、 Java 调用存储过程 要在 Java 中调用存储过程,需要使用 JDBC 连接 DB2 数据库。首先,需要加载 DB2 驱动程序: ```java String JDBCDriver = "com.ibm.db2.jcc.DB2Driver"; ``` 然后,使用 DriverManager ...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂的业务逻辑和数据处理中。MyEclipse作为一款强大的Java集成开发环境,提供了方便的工具来支持这一功能。下面将详细介绍如何在MyEclipse中使用Java调用存储...
通过上述步骤,我们可以实现在Oracle数据库中创建存储过程来返回数据集,并在Java程序中调用该存储过程获取结果集。这种方式不仅提高了数据库操作的安全性和效率,还能够更好地管理复杂的业务逻辑。在实际开发过程中...
- **queryProcedure**方法:该方法是核心处理方法,用于调用存储过程,并获取结果集。 - 参数列表: - `List list`:包含要传递给存储过程的参数值列表。 - `String strStoredProcedureName`:存储过程的名称。 ...