有谁玩过Coracle调用存储过程程并输出结果集

第6章习题参考答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第6章习题参考答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢C语言调用存储过程并且获得返回值-c/c++-电脑编程网C语言调用存储过程并且获得返回值作者:linuxer 和相关&&作者:刘晨晖
1.
名:test

字段:Id& int , Name char , English
int , Maths int , P
2.
存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`query` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `query`( in N int, out s
char(254) )
& declare a,b,c,d,
& declare f char(100);
& declare g decimal(4,2);
& set e=1;
& drop tabl
& create table zongping(NUM int,Name char(255),English int,Maths
int,Physis int,Total int,aver decimal(4,2));
& select English,Maths,Physis,Name into a,b,c,f from chengjibiao
where Id=e;
& set d=a+b+c;
& set g=(a+b+c)/3;
& insert into zongping(NUM,Name,English,Maths,Physis,Total,aver)
values( e,f,a,b,c,d,g );
& set e=e+1;
& until e=N
& select *
DELIMITER ;
主函数(在文件main.c
中):
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#include &/usr/include//.h&
#include &/usr/include/mysql/mysql_version.h&
#include &/usr/include/mysql/errmsg.h&
  int main( int argc,char **argv[] )
&&&&&&& MYSQL
&&&&&&& MYSQL_ROW results,
&&&&&&& char query[50],s[254];
&&&&&&& /**
&&&&&&& if(!mysql_init(&mysql))
&&&&&&&&&&&&&&&
printf(&mysql_init failed!\n&);
&&&&&&&&&&&&&&&
return 0;
if(!mysql_real_connect(&mysql,&localhost&,&root&,&123456&,&test&,0,NULL,CLIENT_MULTI_STATEMENTS))
&&&&&&&&&&&&&
printf(&mysql_real_connect() failed!\n&);
&&&&&&&&&&&&&
mysql_close(&mysql);
&&&&&&&&&&&&&
return 0;
&&&&&& /**
调用存储过程 **/
&&&&&& strcpy(query,&call
query(7,@s)&);
&&&&&&
mysql_real_query(&mysql,query,(unsigned int)strlen(query));
&&&&&& /**
取得存储过程返回值 **/
&&&&&&& mysql_query(&mysql,
&SELECT @s &);
&&&&&&& results =
mysql_store_result(&mysql);
&&&&&&& /**
输出返回值 **/
&&&&&&& printf( &Id&&&&& Name&&&& Maths&&&& English&&& Physis&&& Total&&&& aver\n& );
&&&&&&& while((record =
mysql_fetch_row(results)))
&&&&&&&&&&
printf(&%1s%10s%8s%12s%11s%10s%10s\n&, record[0], record[1],record[2],record[3],record[4],record[5],record[6]);
&&&&&&& mysql_free_result(results);
&&&&&&& mysql_close(&mysql);
&&&&&&& return 0;
(编译:gcc -o main main.c -L/usr/lib/mysql/ -lmysqlclient -lz

+----+-------+-------+---------+--------+
| Id | Name&
| Maths | English |
Physis |
+----+-------+-------+---------+--------+
1 | liu &&
|&&&
2 | zhang |&&&
88 |&&&&&
86 |&&&&
|&&&
79 |&&&&&
|&&&
67 |&&&&&
运行程序得到的结果:
Name&&
Maths&&
Physis&
Total&&&
90&&&&&&&&&
80&&&&
256&&&&
85.33
88&&&&&&&&&
86&&&&
261&&&&
87.00
78&&&&&&&&&
88&&&&
264&&&&
88.00
77&&&&&&&&&
87&&&&
261&&&&
87.00
79&&&&&&&&&
89&&&&
267&&&&
89.00
67&&&&&&&&&
77&&&&
231&&&&
77.00
相关资料:|||||||C语言调用存储过程并且获得返回值来源网络,如有侵权请告知,即处理!编程Tags:                &                    java 通过调用存储过程获取结果集 - 钿园 - ITeye技术网站
博客分类:
一般在java中,数据查询是通过Statement, PreparedStatement获取结果集,今天向大家介绍通过CallableStatement调用存储过程,从而获取结果集.
本文是所用的数据库为oracle.
测试数据库表:
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 存储过程
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_
Create Or Replace Package wilent_types As
Type cursor_type Is Ref Cursor;
End wilent_
Create Or Replace Procedure wilent_group_count(recordSet Out wilent_types.cursor_type)
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);
dbms_output.put_line('as');
Select Max(g.Id) Into index_max From wilent_
Select Min(g.Id) Into index_min From wilent_
For index_for In Index_min..index_max Loop
Select Name Into group_name From wilent_group Where Id=index_
Select Count(*) Into user_count From wilent_user u, wilent_group g Where u.group_id=g.Id And g.Id=index_
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);
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_
End wilent_group_
recordset wilent_types.cursor_
wilent_group_count(recordset);
三. java代码:
package com.wilent.
import java.sql.CallableS
import java.sql.C
import java.sql.ResultS
import java.sql.SQLE
import oracle.jdbc.driver.OracleT
import com.wilent.db.ConnectionM
public class TestProcedure {
public static void main(String[] args) {
Connection conn = ConnectionManager.getConnection();
ResultSet rs = null;
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();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
四. 运行结果
浏览: 24878 次
来自: 广州
有没有尝试过取得结果集rs的大小
太感谢了~~刚开始没有用你的自定义类型,java执行下面的语句 ...
对JAVA的学习得继续努力
测试成功,以后多些交流

我要回帖

更多关于 ef调用存储过程 的文章

 

随机推荐