一般在java中,数据查询是通过Statement, PreparedStatement获取结果集,今天向大家介绍通过CallableStatement调用存储过程,从而获取结果集.
本文是所用的数据库为oracle.
一. 测试数据库表:
sql 代码
- create table wilent_user(
- id number(5) primary key,
- name varchar2(100),
- sex varchar2(1),
- 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);
- index_min Number(4);
- 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;
-
- Select Min(g.Id) Into index_min From wilent_group g;
-
- 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
-
- 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;
- /
-
-
- 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) {
-
- 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
分享到:
相关推荐
本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...
java调用oracle存储过程或者函数
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...
Java 调用存储过程小结 Java 调用存储过程是指在 Java 程序中调用数据库中的存储过程,以便实现复杂的业务逻辑和数据处理。存储过程是指保存在数据库并在数据库端执行的程序,可以使用特殊的语法在 Java 类中调用...
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
Spring jdbcTemplate 调用 Oracle 存储过程...我们创建了一个简单的存储过程,用于查询员工信息,并使用 Spring jdbcTemplate 调用存储过程来获取结果集。这种方法可以帮助我们简化数据库操作,并提高应用程序的性能。
这是自己这段时间学习Oracle数据库的一些有关存储过程和Java中调用存储过程的学习心得。
NULL 博文链接:https://fruitking.iteye.com/blog/1446991
主要介绍了java编程调用存储过程中得到新增记录id号的实现方法,涉及Java数据库操作中存储过程的相关使用技巧,需要的朋友可以参考下
JAVA调用海康威视SDK实现摄像头本地存储
调用存储过程与调用函数类似,但不需要 `?=` 语句,例如: ```java CallableStatement cs = con.prepareCall("{call stu_pro(?,?,?)}"); ``` 在 Java 中,我们需要使用 `registerOutParameter()` 方法来注册输出...
analyData这是一个java定时任务,定时调用mysql的存储过程
"Java代码调用kettle任务" kettle是一款功能强大且灵活的ETL(Extract、Transform、Load)工具,用于数据集成和数据处理。Java代码调用kettle任务可以实现自动化的数据处理和集成,提高工作效率和数据处理速度。 ...
本文主要介绍了如何使用Java语言与Oracle数据库实现分页功能,包括如何编写存储过程、如何使用Java调用存储过程等内容。 首先,文章介绍了分页的必要性,提到在许多情况下需要进行分页操作,例如在数据查询时,需要...
Java调用oracle函数返回oracle类(类似)集合
Java 使用 SOAP 获取 webservice 实例解析是指通过使用 SOAP 协议来调用远程的 Webservice,获取到实例信息的过程。在这个过程中,Java 程序需要使用到 SOAP 协议来发送请求和接收响应,实现对 Webservice 的调用。 ...
Java调用Groovy,实时动态加载数据库groovy脚本,java读取mongoDB的groovy脚本,加载实时运行,热部署
在 Java 中,通过 CallableStatement 对象可以调用存储过程。CallableStatement 是 PreparedStatement 的子类,用于执行存储过程。 CallableStatement 的使用步骤: 1. 首先,创建一个 Connection 对象,用于连接...
java操作geoserver的工具类,包含mongodb和sqlserver创建数据存储的对象, 封装好了图层的shp发布,数据库空间表发布,图层列表查询,删除,发布样式,设置图层默认样式,发布带样式的空间表,删除样式,查询图层中心...
java操作minio文件服务的通用工具类,可以实现使用指定方法就能控制文件的上传下载删除以及更多操作